“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于 PAT 的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。

得到“答案正确”的条件是:

字符串中必须仅有 P、 A、 T这三种字符,不可以包含其它字符;
任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;
如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 a、 b、 c 均或者是空字符串,或者是仅由字母 A 组成的字符串。
现在就请你为 PAT 写一个自动裁判程序,判定哪些字符串是可以获得“答案正确”的。

输入格式:
每个测试输入包含 1 个测试用例。第 1 行给出一个正整数 n (≤10),是需要检测的字符串个数。接下来每个字符串占一行,字符串长度不超过 100,且不包含空格。

输出格式:
每个字符串的检测结果占一行,如果该字符串可以获得“答案正确”,则输出 YES,否则输出 NO。

输入样例:

1
2
3
4
5
6
7
8
9
10
11
10
PAT
PAAT
AAPATAA
AAPAATAAAA
xPATx
PT
Whatever
APAAATAA
APT
APATTAA

输出样例:

1
2
3
4
5
6
7
8
9
10
YES
YES
YES
YES
NO
NO
NO
NO
NO
NO

鸣谢江西财经大学软件学院朱政同学、用户 woluo_z 补充测试数据!
题目链接

#include <iostream>
#include <map>
using namespace std;
//只能有一个P一个T,中间末尾和开头可以随便插入A。但是必须满足
//开头的A的个数 * 中间的A的个数 = 结尾的A的个数
//而且P和T中间不能没有A~
int main() {
    int n;  //有 n 组
    cin >> n;
    for (int i = 0; i < n; i++) {
        int p, t;  // P的位置,T的位置
        string str;
        cin >> str;  //输入这个字符串
        map<char, int> c;
        for (int i = 0; i < str.size(); i++) {
            c[str[i]]++;  //看看有几个字母出现了
            if (str[i] == 'P') p = i;
            if (str[i] == 'T') t = i;
        }
        if ((c.size() == 3) && (c['P'] == 1) && (c['T'] == 1) &&
            (c['A'] != 0) && (t - p > 1) &&
            ((p) * (t - p - 1) == (str.size() - t - 1))) {
            cout << "YES" << endl;
        } else {
            cout << "NO" << endl;
        }
    }
    return 0;
}
```一级标题

读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。

输入格式:
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10 100。

输出格式:
在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。

输入样例:

1
1234567890987654321123456789

输出样例:

1
yi san wu

题目链接
C++版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <string>
using namespace std;
//读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
int main() {
// 读入一个自然数n
string s;
cin >> s;
// 计算各个位数的和,加起来变成 sum
int sum = 0;
for (int i = 0; i < s.size(); i++) {
sum += s[i] - '0';
}
// cout << sum;
// 读出每个数字
string py[10] = {"ling", "yi", "er", "san", "si",
"wu", "liu", "qi", "ba", "jiu"};
string num = to_string(sum);
for (int i = 0; i < num.size(); i++) {
if (i) cout << " ";
cout << py[num[i] - '0'];
}
return 0;
}

下面是 C 语言版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
//读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
#include <stdio.h>
int main() {
int c;
int sum = 0;
while ((c = getchar()) != '\n') {
sum = sum + c - '0';
}
// printf("sum = %d\n", sum);
int out[10] = {0};
int i = 0;
while (sum != 0) {
out[i] = (sum % 10);
++i;
sum = sum / 10;
}
i = i - 1;
while (i + 1) {
switch (out[i]) {
case 0:
// 服了,没有后鼻音导致填错了。
printf("ling");
break;
case 1:
printf("yi");
break;
case 2:
printf("er");
break;
case 3:
printf("san");
break;
case 4:
printf("si");
break;
case 5:
printf("wu");
break;
case 6:
printf("liu");
break;
case 7:
printf("qi");
break;
case 8:
printf("ba");
break;
case 9:
printf("jiu");
break;
}
if (i != 0) {
printf(" ");
}
i--;
}
return 0;
printf("\n");
}
// 也可以用字符串数组写 https://www.jianshu.com/p/8c4af9ef6cb1

卡拉兹(Callatz)猜想:

对任何一个正整数 n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么把 (3n+1) 砍掉一半。这样一直反复砍下去,最后一定在某一步得到 n=1。卡拉兹在 1950 年的世界数学家大会上公布了这个猜想,传说当时耶鲁大学师生齐动员,拼命想证明这个貌似很傻很天真的命题,结果闹得学生们无心学业,一心只证 (3n+1),以至于有人说这是一个阴谋,卡拉兹是在蓄意延缓美国数学界教学与科研的进展……

我们今天的题目不是证明卡拉兹猜想,而是对给定的任一不超过 1000 的正整数 n,简单地数一下,需要多少步(砍几下)才能得到 n=1?

输入格式:
每个测试输入包含 1 个测试用例,即给出正整数 n 的值。

输出格式:
输出从 n 计算到 1 需要的步数。
输入样例:
3
输出样例:
5
题目链接

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
int cal(int n) {
int i = 0;
while (n != 1) {
if ((n % 2) == 1) {
n = ((3 * n + 1) / 2);
++i;
} else {
n = n / 2;
++i;
}
}
return i;
}
//输入数字
int main() {
int n;
scanf("%d", &n);
printf("%d", cal(n));
return 0;
}

M1 芯片的Mac电脑对编译运行调试C/C++的环境配置

你只需要:
1.安装 Xcode Comand-line Tools:
xcode-select --install
文件比较大,可能需要安装很久,安装成功的话
输入
clang -v,会得到类似这样的回复

1
2
3
4
Apple clang version 13.0.0 (clang-1300.0.29.30)
Target: arm64-apple-darwin21.3.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin

目前你安装成功了 C++ 语言的编译器
2.安装Vscode
安装插件,下面四个是必备

1
2
3
4
C/C++
C++ Intellisense
Code Runner
CodeLLDB

3.新建一个文件夹并且把这个 Git 仓库的 .vscode 中的四个文件保存到你这个新建的文件夹中。

4.Enjoy

简单介绍下使用方法

.c/cpp 代码页右上角的运行(或者快捷键 command+option+n)的运行是主要是基于CodeRunner这个插件的,用来对所编写的程序进行快速的编译和输入输出,平常这个用得最多。

左侧边栏第四个中的(或快捷键 fn + F5/等)的运行、调试和断点是主要基于 CodeLLDB 这个插件。这个功能操作起来比较繁琐主要在查 Bug 或者学习他人优秀程序的时候使用,看看程序每一步是怎样运行的。

感谢你看到这里!

主要参考:https://www.cnblogs.com/BYGAO/p/15135609.html。

习题2-1 水仙花数-daffodil


谭浩强习题5-8,难度不大,直接复制过来吧。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
int main() {
int i, bai, shi, ge;
for (i = 100; i < 1000; i++) {
ge = i % 10;
shi = i / 10 % 10;
bai = i / 100 % 10;
if ((ge * ge * ge + shi * shi * shi + bai * bai * bai) == i) {
printf("这是一个水仙花数: %d。\n", i);
} else {
// printf("这不是一个水仙花数\n");
}
}
return 0;
}

习题2-4 韩信点兵-hanxin

方法1 穷举

可怜可怜,只会用穷举。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>
#define MIN 10
#define MAX 100
int hanxin(int a, int b, int c) {
int i;
for (i = MIN; i < MAX; i++) {
if ((i % 3 == a) && (i % 5 == b) && (i % 7 == c)) {
return i;
}
}
return 0;
}
int main() {
int sum, a, b, c, kase = 0;
while ((scanf("%d", &a)) && (scanf("%d", &b)) && (scanf("%d", &c))) {
printf("Case %d:", ++kase);
if ((sum = hanxin(a, b, c)) != 0) {
printf("%d", sum);
} else {
printf("No answer");
}
printf("\n");
}
return 0;
}

习题2-3 倒三角型-triangle


和我们课程测试题目差不多,甚至更简单。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
void space(int x) {
while (x--) {
printf(" ");
}
}
void jin(int x) {
while (x--) {
printf("#");
}
}
int main() {
int n;
int i = 0;
scanf("%d", &n);
if (n <= 20 && n > 0) {
while (n) {
space(i++);
jin(2 * (n--) - 1);
printf("\n");
}
}
return 0;
}

习题2-4 子序列的和-subsequence


题目说:本题有陷阱。但可惜我不知道陷阱是啥。。。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
double cal(long n, long m) {
double sum = 0;
for (n = n - 1; n < m; n++) {
sum += 1 / (double)((n + 1) * (n + 1));
}
return sum;
}
int main() {
int kase = 0;
long n, m;
while ((scanf("%ld%ld", &n, &m)) && ((n != 0) && (m != 0))) {
if (kase) printf("\n");
printf("Case %d:%.5f", ++kase, cal(n, m));
}
return 0;
}

习题2-5 分数化小数-decimal


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
// 坑!
// strlen 是数组长度,数组长度 0 1 2 3 4,有 5 项,倒数第二项是 3,所以要减 2。
// 这个长度是计算到非 0 的数字的,也就是说 num[10] = {1,0,0,0,0},只有一项!
#include <math.h>
#include <stdio.h>
// 这是用来输出小数点后半段的
void chu(int a, int b, int c) {
// 用来存放小数点的数组
char num[101];
// 计算的余数?不知道叫啥。
int tmp = a;
// 计数器,两次的用途不一样
int i;
// 位数
int ws = 0;
// 自己实现除法
for (i = 0; i <= c; i++) {
// 请看本文章旁边的图理解
num[i] = (tmp * 10) / b;
// printf("num[%d]=%d\n", i, num[i]);
tmp = (tmp * 10) % b;
ws++;
}

for (i = 0; i < (ws - 1); i++) {
// 四舍五入
if (i == (ws - 2)) {
if (num[i + 1] > 4) {
num[i] = num[i] + 1;
}
}
printf("%d", num[i]);
}
}
int main() {
int a, b, c, kase = 0;
while ((scanf("%d", &a)) && (scanf("%d", &b)) && (scanf("%d", &c)) &&
!((a == 0) && (b == 0) && (c == 0))) {
if (++kase) printf("\n");
// 输出前半段
printf("Case %d: 0.", kase);
chu(a, b, c);
}
return 0;
}

习题2-6 排序-permutation


我日,真难啊!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <stdio.h>
int main() {
int a, b, c, kase = 0;
// 百位
for (int ai = 0; ai < 3; ai++) {
char arr[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
a = arr[ai];
arr[ai] = 0;
// 十位
for (int bi = 0; bi < 9; bi++) {
if (!arr[bi]) continue;
b = arr[bi];
arr[bi] = 0;
// 个位
for (int ci = 0; ci < 9; ci++) {
if (!arr[ci]) continue;
c = arr[ci];
arr[ci] = 0;
int num1, num2, num3;
// 生成 num1, 它是 a b c
num1 = 100 * a + 10 * b + c;
// 生成 num 2,分解为 d e f
num2 = 2 * num1;
int d = num2 / 100 % 10, e = num2 / 10 % 10, f = num2 % 10;
// 分解 num 3,分解为 h i j
num3 = 3 * num1;
int h = num3 / 100 % 10, i = num3 / 10 % 10, j = num3 % 10;
if ((e != 0) && (f != 0) && (i != 0) && (j != 0)) {
// printf("\n%d %d %d\n", num1, num2, num3);
// 放到数组中
char tmp[9] = {a, b, c, d, e, f, h, i, j};
// 找不一样
int flag = 0;
for (int fi = 0; fi < 9; fi++) {
for (int fn = 0; fn < fi; fn++) {
// printf("%d %d\n", tmp[fi], tmp[fn]);
if (fn != fi && tmp[fi] == tmp[fn]) {
// 如果它有相等,证明他不是一个互不相同的数字
// printf("Fuck1");
flag = 1;
}
}
}
// 如果flag是0,他是一个互不相同的数字
if (!(flag))
printf("找到你了! %d %d %d\n", num1, num2, num3);
}
// 恢复数字
// arr[ai] = a;
arr[bi] = b;
arr[ci] = c;
}
}
}
return 0;
}

博客很久没更新,于是我就来水篇文章。
最近看小X书经常推荐9价有关的文章,仔细研究了下只可惜我是男生现在还打不了,不然我也去接种。身边有一定经济实力的小姐姐基本也都想打,但是粥少和尚多,9价基本被黄牛垄断。于是我做了个shell爬虫,当某地的预约界面网页更新时推送通知到微信,便于第一时间抢购。不过这简直耍猴啊,总共才放15个。

shell脚本,复制到本地改后缀为sh,还有使用前请先安装jq,用来解析json。
具体实现在注释里,有些地方确实奇奇怪怪,这是因为我对shell还是一知半解,不过能跑就行吧XD。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
data=$( curl 'https://URL.com/zs/h5/yuyue/getYuyueDataList' \
-H 'authority: URL.com' \
-H 'sec-ch-ua: "Google Chrome";v="95", "Chromium";v="95", ";Not A Brand";v="99"' \
-H 'accept: application/json, text/plain, */*' \
-H 'content-type: application/x-www-form-urlencoded' \
-H 'x-requested-with: XMLHttpRequest' \
-H 'sec-ch-ua-mobile: ?1' \
-H 'user-agent: Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Mobile Safari/537.36' \
-H 'sec-ch-ua-platform: "Android"' \
-H 'origin: https://URL.com' \
-H 'sec-fetch-site: same-origin' \
-H 'sec-fetch-mode: cors' \
-H 'sec-fetch-dest: empty' \
-H 'referer: https://URL.com/zs/h5/yuyue/yuyueList?id=_oYy9g&templateKey=' \
-H 'accept-language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7' \
-H 'cookie: hdj_source_key=hdj; SERVERID=6d17e866f6f8c03d041bea7e9882758a|1638112852|1638112429' \
--data 'id=_oYy9g&pageid=1&rows=30&stime=&etime=&keyword=&tags=%5B%5D&source_key=hdj&env=h5' \
--compressed)
# jq 解析json,获取开始时间,不太会传参,就分了两部
now=$(cat 9jiadata.txt | jq -r '.["data"][0].stime' )
date=$(date -d @$now +'%Y%m%d %H:%M:%S')
#获取其他信息
max_num=$(cat 9jiadata.txt | jq -r '.["data"][0].max_num')
left=$(cat 9jiadata.txt | jq -r '.["data"][0].left')
detail=$(cat 9jiadata.txt | jq -r '.["data"][0].detail')
yoid=$( cat 9jiadata.txt | cut -d'"' -f16)
# todo 构建预约链接
yuyueurl=$"/yuyue/pages/yuyueSuccess/yuyueSuccess?yoid=$yoid&id=' + that.yuyueId + '&stime=' + that.selectedDateTime.selectedStimeStamp + '&etime=' + that.selectedDateTime.selectedEtimeStamp + '&yodid="

old=`cat 9jia.txt`

# 元数据存放在 9jiadata.txt ,防止多次爬取
cat > 9jiadata.txt << END_TEXT
$data
END_TEXT

# echo "$date"
if [ "$now" == "$old" ]
then
echo '没更新!'
#那就更新old
cat > 9jia.txt << END_TEXT
$now
END_TEXT
else
echo '更新了!'
curl -L -G --data-urlencode content="某地9价,时间$date。总数$max_num,剩余$left,详情$detail。预约链接 https://URL.com/zs/h5/yuyue/yuyuetime?id=_oYy9g&yoid=$yoid&yodid=" "API"
cat > 9jia.txt << END_TEXT
$now
END_TEXT
fi

仅限技术交流分享用,所以关键信息已经被删除。

使用腾讯问卷收集信息的好处:

0.保护隐私。每个填写人只能看到自己提交的内容。
1.数据不易被篡改。使用在线文档收集信息,往往因为同学的误操作导致数据丢失混乱,而问卷收集不会。
2.美观速度快。腾讯问卷是一个网页,每个人只能看到几个输入框,输完就表示填写结束。而QQ/微信XX文档小程序在手机上经常抽风打不开,左右滑动上下看文字很卡很慢。

劣势:

0.学习成本较高。相对于XX在线文档,打几个字就能扔链接。腾讯问卷比较复杂。

下面是简单的操作步骤。

https://wj.qq.com/guide.html




这是一个油猴脚本,需要你登陆进入安全微伴后,点击进入某一个课,脚本运行,自动帮你看课,看完后就会自动跳回上一个选课的页面,只是免去了你手动点击完成课的过程。
能力有限,只能做到半自动。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// ==UserScript==
// @name 新生安全教育
// @namespace https://gist.githubusercontent.com/Windyskr/3dc786606bd18cc731acf3e17f0caa91/raw/51e271e1b0b720de5cd16b0976dec2a99897d2ae/anquanjiaoyu.js
// @version 0.1
// @description 浏览器打开登陆,点进课程会自动做。2021.08.27 可用!
// @author Windyskr
// @match *://*.mycourse.cn/*
// @grant none
// ==/UserScript==

// 把烦人的 alert 取消
window.alert = function() {
return false;
}

//判断是否为视频,是视频多等一下,当然你也可以手动看完
if(document.getElementById("my-video") != null){
console.log("是视频,等待75s");
setTimeout(() => finishWxCourse(), 75000 );//核心代码,经过测试必须开启延时,否则看了也是没看
setTimeout(() => window.history.back(), 77000 );//自动回到原页面
}
else {
console.log("是答题,等待20s");
setTimeout(() => finishWxCourse(), 20000 );
setTimeout(() => window.history.back(), 23000 );
}
0%