目录T1. 满足条件的数累加 2思路分析T2. 统一文件名思路分析T3. Lab 杯思路分析T4. 整数排序思路分析T5. 石头剪刀布思路分析T1. 满足条件的数累加 2题目链接SOJ D1096现有n nn个整数将其中个位数为k kk的数进行累加求和。时间限制1 s内存限制64 MB输入第一行1 11个整数n nn。0 n 1000 0 n 10000n1000。第二行n nn个非负整数以空格分隔每个数不大于100000 100000100000。第三行1 11个整数k kk。0 ≤ k ≤ 9 0 \le k \le 90≤k≤9。输出输出满足题目要求的累加和。样例输入10 2 5 7 17 11 18 4 27 1 7 7样例输出58思路分析此题考查数组的查询操作以及取余运算属于入门题。此题只需要将数据输入数组中然后依次遍历每个元素检测个位是否为k kk若是则进行累加即可。/* * Name: T1.cpp * Purpose: 满足条件的数的累加 2 * Author: Teacher Gao. * DateTime: 2024/09/24 18:46 */#includecstdiousingnamespacestd;intmain(){intn,a[1005],k,sum0;scanf(%d,n);for(inti1;in;i){scanf(%d,a[i]);}scanf(%d,k);for(inti1;in;i){if(a[i]%10k){suma[i];}}printf(%d,sum);return0;}T2. 统一文件名题目链接SOJ D1071小A AA在命名文件的时候经常不注意大小写格式比较混乱。现要求你写一个程序将目录下的文件统一规范的格式即文件名的第一个字符如果是字母要大写其他字母小写。如将Test \text{Test}Test、test \text{test}test整理成Test \text{Test}Test。时间限制1 s内存限制64 MB输入第一行一个数字n nn表示有n nn个文件名要统一n nn不超过100 100100。接下来n nn行每行一个单词长度不超过20 2020表示文件的名字。文件名由字母、数字和-组成。输出n nn行每行一个单词对应统一后的文件名。样例输入4 Test data 2-TEST problem-6样例输出Test Data 2-test Problem-6思路分析此题考查字符的修改操作属于入门题。此题需要将输入的n nn个字符串的首字母改为大写字母其余字母改为小写然后输出即可。可以采用if语句进行判定若输入字符串的首字母为小写字母则将其修改为对应的大写字母之后输出。也可以采用toupper函数实现该函数的功能是将小写字母改为大写字母若参数不是小写字母则不做任何修改同理利用tolower函数结合循环处理其余字母。/* * Name: T2.cpp * Problem: 统一文件名 * Author: Teacher Gao. * DateTime: 2024/09/15 14:29 */#includeiostream#includestringusingnamespacestd;intmain(){intn;string s;cinn;for(inti1;in;i){cins;s[0]toupper(s[0]);for(intj1;js.size();j){s[j]tolower(s[j]);}coutsendl;}return0;}T3. Lab 杯题目链接SOJ D1201“Lab \text{Lab}Lab杯” 乒乓球赛就要在PKU \text{PKU}PKU的实验室之间举行了。人工智能实验室的学生都是乒乓球的狂热分子都强烈希望代表实验室去比赛。但是有余名额限制他们之中只能由一个人被选作代表。为了让选择的过程公平他们决定打一次单循环赛每一对学生之间都打一场五局三胜的比赛。赢得最多比赛的人就将代表实验室去比赛。现在Ava \text{Ava}Ava手里有一份表表里面记录了每一场比赛的比分。她应该让谁去比赛时间限制1 s内存限制64 MB输入输入包含一组测试数据。第一行包含n nn2 ≤ n ≤ 100 2 ≤ n ≤ 1002≤n≤100表示实验室里学生的数目。接下来给出一个n × n n × nn×n矩阵A AA。矩阵的每一个元素都是0 00、1 11、2 22、3 33中的一个。第i ii行第j jj列的元素a i j a_{ij}aij​是第i ii个学生在和第j jj个学生的比赛中赢的局数。a i j a_{ij}aij​和a j i a_{ji}aji​i ≠ j i ≠ jij正好有一个是3 33另外一个小于3 33。矩阵的所有对角线元素都是0 00。输出输出赢了最多比赛的学生的编号。如果有平分选择编号最小的。样例输入4 0 0 3 2 3 0 3 1 2 2 0 2 3 3 3 0样例输出4思路分析此题考查题目信息提取的能力以及打擂台思想属于入门题。按行统计第i ii个学生获胜的场数即3 33的个数然后比较所有学生的获胜场数输出获胜场数最多的学生编号即可。/* * Name: T3.cpp * Problem: Lab 杯 * Author: Teacher Gao. * DateTime: 2024/11/15 22:07 */#includeiostreamusingnamespacestd;intmain(){intn,x;intans_id,ans_num0;cinn;for(inti1;in;i){inttot0;for(intj1;jn;j){cinx;if(x3)tot;}if(totans_num){ans_numtot;ans_idi;}}coutans_id;return0;}T4. 整数排序题目链接SOJ D1073给定10 1010个整数的序列要求对其重新排序。排序要求奇数在前偶数在后奇数按从大到小排序偶数按输入顺序逆序排序。时间限制1 s内存限制64 MB输入输入一行包含10 1010个整数彼此以一个空格分开每个整数的范围是大于等于0 00小于等于100 100100。输出按照要求排序后输出一行包含排序后的10 1010个整数数与数之间以一个空格分开。样例输入4 7 3 13 11 12 0 47 34 98样例输出47 13 11 7 3 98 34 0 12 4思路分析此题考查排序算法难度一般。此题较为简单的做法是将奇数和偶数分开两个数组存储对奇数数组做从大到小排序后输出然后对偶数数组进行逆序输出。请读者自行实现。此题也可以使用结构体排序但是排序规则比较繁琐需要讨论两个关键字的奇偶性若同时为偶数还需要考虑其输入次序。简单起见可以将奇偶性属性也加入结构体成员并作为第一关键字进行比较。见示例代码。/* * Name: T4.cpp * Problem: 整数排序 * Author: Teacher Gao. * DateTime: 2024/09/15 15:10 */#includeiostream#includealgorithmusingnamespacestd;structnum{// info 为 1 表示奇数为 0 表示偶数intval,id,info;}a[15];boolcmp(num x,num y){if(x.info!y.info)returnx.infoy.info;if(x.info1)returnx.valy.val;returnx.idy.id;}intmain(){for(inti1;i10;i){cina[i].val;a[i].idi;a[i].infoa[i].val%2;}sort(a1,a101,cmp);for(inti1;i10;i){couta[i].val ;}return0;}T5. 石头剪刀布题目链接SOJ D1047石头剪刀布是常见的猜拳游戏。石头胜剪刀剪刀胜布布胜石头。如果两个人出拳一样则不分胜负。一天小A AA和小B BB正好在玩石头剪刀布。已知他们的出拳都是有周期性规律的比如“石头 - 布 - 石头 - 剪刀 - 石头 - 布 - 石头 - 剪刀. . . ......”就是以 “石头 - 布 - 石头 - 剪刀” 为周期不断循环的。请问小A AA和小B BB比了n nn轮之后谁赢的轮数多时间限制1 s内存限制64 MB输入输入包含三行。第一行包含三个整数n , n a , n b n, na, nbn,na,nb分别表示比了n nn轮小A AA出拳的周期长度小B BB出拳的周期长度。0 n , n a , n b 100 0 n, na, nb 1000n,na,nb100。第二行包含n a nana个整数表示小A AA出拳的规律。第三行包含n b nbnb个整数表示小B BB出拳的规律。其中0 00表示 “石头”2 22表示 “剪刀”5 55表示 “布”。相邻两个整数之间用单个空格隔开。输出输出一行如果小A AA赢的轮数多输出A如果小B BB赢的轮数多输出B如果两人打平输出draw。样例输入10 3 4 0 2 5 0 5 0 2样例输出A提示对于样例数据猜拳过程为A: 0 2 5 0 2 5 0 2 5 0 B: 0 5 0 2 0 5 0 2 0 5A AA赢了4 44轮B BB赢了2 22轮双方打平4 44轮所以A AA赢的轮数多。思路分析此题考察数组的灵活应用难度一般。可以在输入结束后分别将a[]和b[]按照给定出拳规律重复存储直到存储够n nn项为止然后依次对比每一次出拳进而统计出获胜者。也可以不进行重复存储直接用下标对出拳周期n a nana和n b nbnb分别取余得到对应的出拳结果。需要注意的是这种方法需要将出拳规律存储在下标0 ∼ n a − 1 0 \sim na-10∼na−1和0 ∼ n b − 1 0 \sim nb-10∼nb−1范围内。至于比较出拳结果可以封装成函数使得逻辑结构更清晰。当函数返回0 00时表示平局− 1 -1−1表示小A AA负1 11表示小A AA胜。在主函数内将该函数的返回值进行累加若总数为正则小A AA胜总数为负表示小B BB胜否则表示平局。/* * Name: T5.cpp * Problem: 石头剪刀布 * Author: Teacher Gao. * DateTime: 2024/05/26 15:42 */#includeiostreamusingnamespacestd;intcheck(inta,intb){if(ab)return0;if(a2b0)return-1;if(a5b2)return-1;if(a0b5)return-1;return1;}intmain(){intn,na,nb,tot0;inta[105],b[105];cinnnanb;for(inti0;ina;i)cina[i];for(inti0;inb;i)cinb[i];for(inti0;in;i)totcheck(a[i%na],b[i%nb]);if(tot0)coutAendl;elseif(tot0)coutBendl;elsecoutdrawendl;return0;}