题目集链接,非本校同学可能打不开 https://pintia.cn/problem-sets/1546142650662113280/submissions
7-1 写出这个数 分数 10
作者 xxxtentx
单位 江西财经大学
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10100
输出格式: 在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。
输入样例: 在这里给出一组输入。例如:
1 1234567890987654321123456789
输出样例: 在这里给出相应的输出。例如:
没什么难度
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 #include <algorithm> #include <cstring> #include <iostream> #include <stack> using namespace std;int main () { string n; getline (cin, n); int cnt = 0 ; for (int i = 0 ; i < n.size (); i++) cnt += (n[i] - '0' ); stack<string> st; while (cnt) { switch (cnt % 10 ) { case 0 : st.push ("ling" ); break ; case 1 : st.push ("yi" ); break ; case 2 : st.push ("er" ); break ; case 3 : st.push ("san" ); break ; case 4 : st.push ("si" ); break ; case 5 : st.push ("wu" ); break ; case 6 : st.push ("liu" ); break ; case 7 : st.push ("qi" ); break ; case 8 : st.push ("ba" ); break ; case 9 : st.push ("jiu" ); break ; } cnt /= 10 ; } cout << st.top (); st.pop (); while (!st.empty ()) { cout << " " << st.top (); st.pop (); } return 0 ; }
7-2 成绩排名 分数 25
作者 江太白
单位 江西财经大学
读入 n(>0)名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。
输入格式: 每个测试输入包含 1 个测试用例,格式为
第 1 行:正整数 n
第 2 行:第 1 个学生的姓名 学号 成绩
第 3 行:第 2 个学生的姓名 学号 成绩
… … …
第 n+1 行:第 n 个学生的姓名 学号 成绩
其中姓名和学号均为不超过 10 个字符的字符串,成绩为 0 到 100 之间的一个整数,这里保证在一组测试用例中没有两个学生的成绩是相同的。
输出格式: 对每个测试用例输出 2 行,第 1 行是成绩最高学生的姓名和学号,第 2 行是成绩最低学生的姓名和学号,字符串间有 1 空格。
输入样例: 1 2 3 4 3 Joe Math990112 89 Mike CS991301 100 Mary EE990830 95
输出样例: 1 2 Mike CS991301 Joe Math990112
复习一下结构体存储数据和sort函数的用法。
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 #include <algorithm> #include <cstring> #include <iostream> using namespace std;typedef struct st { string name, id; int score; } st; bool stu_sort (st a, st b) { return a.score > b.score; }int main () { int n; st stu[10010 ]; cin >> n; for (int i = 0 ; i < n; i++) { cin >> stu[i].name >> stu[i].id >> stu[i].score; } sort (stu, stu + n, stu_sort); cout << stu[0 ].name << ' ' << stu[0 ].id << endl; cout << stu[n - 1 ].name << ' ' << stu[n - 1 ].id; return 0 ; }
7-3 日期类 分数 20 作者 xxxtentx
单位 江西财经大学
编写一个日期类,要求按 xxxx-xx-xx 的格式输出日期,实现加一天的操作。
输入格式: 第一行包含整数 T,表示共有 T 组测试数据。
每组数据占一行,包含 3 个用空格隔开的整数,分别表示年月日。
输出格式: 每组数据输出一行,一个结果,按 xxxx-xx-xx 的格式输出,表示输入日期的后一天的日期。
数据范围: 输入日期保证合法且不会出现闰年 。 年份范围 [1000,3000]
输入样例: 在这里给出一组输入。例如:
输出样例: 在这里给出相应的输出。例如:
日期类问题一直是模拟题中的难点,可以参考 https://www.acwing.com/blog/content/5918/ 来进行学习
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 #include <algorithm> #include <cstring> #include <iostream> using namespace std;int T;int months[] = {0 , 31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 };int get (int year, int month) { if (month != 2 ) return months[month]; else { int leap = (year % 4 == 0 && year % 100 != 0 || year % 400 == 0 ); return 28 + leap; } } void next_date (int year, int month, int date) { if (date == get (year, month)) { if (month == 12 ) { year++; month = 1 ; } else { month++; } date = 1 ; } else { date++; } printf ("%04d-%02d-%02d\n" , year, month, date); } int main () { cin >> T; while (T--) { int year, month, date; cin >> year >> month >> date; next_date (year, month, date); } return 0 ; }
7-4 日期之差 分数 25
作者 江太白
单位 江西财经大学
给定两个日期,请你计算这两个日期之间有少天(定义连续的日期之差为2天)
输入格式: 共两行,每一行输入一个日期,日期格式为yyyy-MM-dd
输出格式: 一个正整数,为两个日期之间的差
输入样例:
输出样例:
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 61 62 63 64 65 #include <algorithm> #include <cstring> #include <iostream> using namespace std;int T;int months[] = {0 , 31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 };bool leap (int year) { return (year % 4 == 0 && year % 100 != 0 || year % 400 == 0 ); } int get (int year, int month) { if (month != 2 ) return months[month]; else { return 28 + leap (year); } } int main () { int year1, month1, date1; int year2, month2, date2; scanf ("%d-%d-%d" , &year1, &month1, &date1); scanf ("%d-%d-%d" , &year2, &month2, &date2); if (year1 == year2) { if (month1 == month2) { cout << abs (date2 - date1) + 1 ; return 0 ; } else if (month1 < month2) { int ans = 0 ; ans += get (year1, month1) - date1; for (int i = month1 + 1 ; i < month2; i++) ans += get (year1, i); ans += date2; cout << ans + 1 << endl; return 0 ; } else if (month1 > month2) { int ans = 0 ; ans += get (year1, month2) - date2; for (int i = month2 + 1 ; i < month1; i++) ans += get (year1, i); ans += date1; cout << ans + 1 << endl; return 0 ; } } else if (year1 < year2) { int ans = 0 ; ans += get (year1, month1) - date1; for (int i = month1 + 1 ; i <= 12 ; i++) ans += get (year1, i); for (int i = year1 + 1 ; i < year2; i++) ans += 365 + leap (i); for (int i = 1 ; i < month2; i++) ans += get (year2, i); ans += date2; cout << ans + 1 << endl; } else if (year1 > year2) { int ans = 0 ; ans += get (year2, month2) - date2; for (int i = month2 + 1 ; i <= 12 ; i++) ans += get (year2, i); for (int i = year2 + 1 ; i < year1; i++) ans += 365 + leap (i); for (int i = 1 ; i < month1; i++) ans += get (year1, i); ans += date1; cout << ans + 1 << endl; return 0 ; } return 0 ; }
7-5 数字的菱形 分数 20
作者 xxxtentx
单位 江西财经大学
打印一个由数字 0∼n 构成的菱形。
其中 n 位于正中心,数字靠近边缘时逐个递减,直至为 0。
例如,当 n=5 时,图形如下所示:
1 2 3 4 5 6 7 8 9 10 11 0 0 1 0 0 1 2 1 0 0 1 2 3 2 1 0 0 1 2 3 4 3 2 1 0 0 1 2 3 4 5 4 3 2 1 0 0 1 2 3 4 3 2 1 0 0 1 2 3 2 1 0 0 1 2 1 0 0 1 0 0
现在,给定 n,请你打印相应菱形。
输入格式: 一个整数 n。
输出格式: 输出相应菱形。
数据范围: 2 ≤ n ≤ 9
输入样例: 在这里给出一组输入。例如:
输出样例: 在这里给出相应的输出(注意每一个数字后面都有一个空格)。例如:
1 2 3 4 5 0 0 1 0 0 1 2 1 0 0 1 0 0
tips:第一行的0前面有4个空格,后面有5个空格
找规律的题目,规律与哈密顿距离有关(平面距离某一点的距离,就是那两个abs)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #include <algorithm> #include <cstring> #include <iostream> using namespace std;int g[11 ][11 ];int main () { int n; cin >> n; for (int i = 0 ; i < 2 * n + 1 ; i++) { for (int j = 0 ; j < 2 * n + 1 ; j++) { int t = n - abs (i - n) - abs (j - n); if (t < 0 ) printf (" " ); else printf ("%d " , t); } puts ("" ); } return 0 ; }