《2022年程序设计大赛试题及答案 .pdf》由会员分享,可在线阅读,更多相关《2022年程序设计大赛试题及答案 .pdf(9页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、试题1、数学黑洞(程序文件名maths.c/maths.cpp)【问题描述】任给一个 4位正整数, 其各位数位上的数字不全相同,将数字重新组合成一个最大的数与最小的数相减,重复这个过程,最多 7步,必得 6174。对任给的 4位正整数(各位数位上的数字不全相同),编程输出掉进黑洞的步数。【输入】一行,一个 4位正整数 n(1000 n9999 )【输出】掉进黑洞的步数输入1234 输出3 2、进制转换(程序文件名conver.c/conver.cpp)【问题描述】任给一个十进制整数n, 及正整数 m(m=16 且m 10), 将n转换成 m 进制并输出。【输入】一行,两个整数 n,m (0 n
2、 500000 ,2 m 16 ,且m 10),中间用一个空格隔开,其中n 表示十进制数。【输出】转换后的数【输入输出样例】输入255 8 输出377 3、分数线划定(程序文件名score.c/score.cpp)【问题描述】公务员选拔工作正在 A 市如火如荼的进行。 为了选拔优秀人才,A 市对所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试。面试分数线根据计划录取人数的150% 划定,即如果计划录取m 名公务员,则面试分数线为排名第m*150% (向下取整)名的选手的分数,而最终进入面试的选手为笔试成绩不低于面试分数线的所有选手。现在就请你编写程序划定面试分数线,并输出所有
3、进入面试的选手的报名号和笔试成绩。【输入】第一行,两个整数n,m (5 n 5000 ,3 m n ),中间用一个空格隔开,其中n 表示报名参加笔试的选手总数, m 表示计划录取的人数。输入数据保证m*150% 向下取整后小于等于n。第二行到第 n+1 行,每行包括两个整数,中间用一个空格隔开,分别是选手的报名号k(1000 k 9999)和该选手的笔试成绩s(1 s 100 )。数据保证选手的报名号各不相同。【输出】第一行,有两个整数,用一个空格隔开,第一个整数表示面试分数线;第二个整数为进入面试的选手的实际人数。从第二行开始,每行包含两个整数,中间用一个空格隔开,分别表示进入面试的选手的报
4、名号和笔试成绩,按照笔试成绩从高到低输出,如果成绩相同,则按报名号由小到大的顺序输出。【输入输出样例】输入6 3 1000 90 3239 88 2390 95 7231 84 1005 95 1001 88 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 9 页 - - - - - - - - - 输出88 5 1005 95 2390 95 1000 90 1001 88 3239 88 【样例说明】m*150% = 3*150% = 4.5,向下取整后为 4。保证
5、4 个人进入面试的分数线为88,但因为 88有重分,所以所有成绩大于等于 88 的选手都可以进入面试,故最终有5 个人进入面试。4、生日礼物( gift.c/gift.cpp)【问题描述】小新今天过生日,他妈妈带他到一家购物中心,他妈妈告诉他他今天可以在这家商店选购3件礼物,但这 3件礼物必须满足条件: 后面礼物的价格不得高于前面礼物的价格,如有 5件商品价格分别是12,11,8,9,10,则小新挑选礼物方案只能是(12,11,8 )、( 12,11,9 )、( 12,11,10 )这三种方案中的一种,小新对挑选礼物的方案很感兴趣,请编程计算挑选礼物的方案数。【输入】第一行,一个整数 n(n
6、1000) ,表示待选商品的总数。第二行n个整数,用空格隔开,分别表示每件商品的价格( 每件商品的价格10000) 。【输出】共一行,包含 1 个整数,表示挑选礼物的方案数。【输入输出样例】输入5 12 11 8 9 10 输出3 5、资金预算 (budget.c/budget.cpp) 【问题描述】小新的亲戚开了一家建材批发部,近来由于价格不稳定,故需要制定按月执行的仓储计划,该批发部有 n个供货月份,每个月仓储预算、商品价格预算、客户需求量分别为Pi,Si,Di,,每月客户需求必须得到保证。当然,也可以在价格适当时进行囤货,即用仓库所储备的商品供货。若存货不足,就要购买商品供货,如某月要购
7、货,则该月要加上一笔购货预算资金Ri。例如,有 2个预算月份, P1,S1,D1,R1 分别为 0,10,100,10;P2,S2,D2,R2 分别为 0,100,100,10;则方案 1:第一个月买够 D1的货,第二个月买够D2的货,预算等于(D1S1+R1)+(D2S2+R2)=(10010+10)+(100 100+10)=11020 。方案 2:第一个月买够 2个月的商品, 第二个月不用买货,可用囤积的商品供货,但需要支付第一个月的仓储费,预算等于(D1+D2) S1+R1)+(P1D2)(100+100) 10)+(0 100) 2010。显然方案 2优于方案 1。人工进行这样的预算
8、费时费力,请你编程帮小新亲戚安排预算从而实现利润的最大化。【输入】输入文件第一行是整数n(1 n 20), 表示有 n个月份;接着有 n行 ,每行 4个数据,分别表示 Pi,Si,Di,Ri,即仓储费用,商品价格预算,客户需求量及购货预算。其中1 i n,0 Pi,Si,Ri100000; , Di 500。【输出】仅1行,数据是最小总预算。样例 1:【输入 1】2 0 10 100 10 0 100 100 10 【输出 1】2010 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第
9、 2 页,共 9 页 - - - - - - - - - 样例 2:【输入 2】2 100 10 100 10 0 100 100 10 【输出 2】11020 6、热带鱼( fish.c/fish.cpp)【问题描述】一个晴朗的星期天,小新在商场看见美丽的热带鱼,五彩斑斓的热带鱼在碧绿的水草映照下格外绚丽夺目,大大小小的鱼儿有的慢悠悠的散着步,有的疾驰如闪电,小新不禁被美丽的鱼儿所吸引,他非常想将这些美丽的小精灵们全买回家,但鱼儿的种类太多了,所以小新决定每种鱼最多只买1条,由于鱼儿间会相互争斗蚕食,故有些鱼儿是不能同时买回家的,小新想买尽可能多的鱼,但他身上的钱有限,只能在资金许可的范围内
10、买鱼,怎么办?请你设计一个最佳方案,在资金许可的范围选择花费资金最多的一种买鱼方案。程序运行时间10s内。【输入】文件的第一行为两个正整数m (m 1000)与 n(n30), 分别表示资金与鱼的种类;以下行,每行 2个正整数,分别表示某种鱼的编号(编号30)及价格(价格 10000);接着,每行 2个正整数 p与q ,表示编号 p与编号 q的鱼不能共处,当p、q均等于 0时,表示输入文件结束。【输出】输出文件为 2行,分别为 2个正整数,第一行整数表示所买鱼的条数,第二行整数表示所花费的资金。样例 1:【输入 1】15 3 1 30 2 39 3 18 1 3 0 0 【输出 1】0 0 样
11、例 2:【输入 2】180 6 6 80 5 60 4 40 3 30 2 50 1 20 1 4 3 5 5 6 0 0 【输出 2】4 180 7、电脑游戏 (game.c/game.cpp) 【问题描述】小新正在玩一个简单的电脑游戏。游戏中有一条环形马路,马路上有n 个机器人工厂,两个相邻机器人工厂之间由一小段马路连接。小新以某个机器人工厂为起点,按顺时针顺序依次将这n 个机器人工厂编号为1n,因为马路是环形的,所以第 n 个机器人工厂和第 1 个机器人工厂是由一段马路连接在一起的。小新将连接机器人工厂的这n 段马路也编号为1n,并名师资料总结 - - -精品资料欢迎下载 - - - -
12、 - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 9 页 - - - - - - - - - 规定第 i 段马路连接第 i 个机器人工厂和第i+1 个机器人工厂 (1 i n-1 ),第n 段马路连接第 n 个机器人工厂和第 1个机器人工厂。 游戏过程中, 每个单位时间内, 每段马路上都会出现一些金币,金币的数量会随着时间发生变化,即不同单位时间内同一段马路上出现的金币数量可能是不同的。小新需要机器人的帮助才能收集到马路上的金币。所需的机器人必须在机器人工厂用一些金币来购买,机器人一旦被购买,便会沿着环形马路按顺时针方向一直行走
13、,在每个单位时间内行走一次,即从当前所在的机器人工厂到达相邻的下一个机器人工厂,并将经过的马路上的所有金币收集给小新,例如,小新在i (1 i n )号机器人工厂购买了一个机器人,这个机器人会从i 号机器人工厂开始,顺时针在马路上行走,第一次行走会经过i 号马路,到达 i+1 号机器人工厂(如果i=n ,机器人会到达第1 个机器人工厂),并将i 号马路上的所有金币收集给小新。游戏中,环形马路上不能同时存在2 个或者 2 个以上的机器人,并且每个机器人最多能够在环形马路上行走p 次。小新购买机器人的同时,需要给这个机器人设定行走次数,行走次数可以为1p 之间的任意整数。当马路上的机器人行走完规定
14、的次数之后会自动消失,小新必须立刻在任意一个机器人工厂中购买一个新的机器人,并给新的机器人设定新的行走次数。以下是游戏的一些补充说明:1. 游戏从小新第一次购买机器人开始计时。2. 购买机器人和设定机器人的行走次数是瞬间完成的,不需要花费时间。3. 购买机器人和机器人行走是两个独立的过程,机器人行走时不能购买机器人,购买完机器人并且设定机器人行走次数之后机器人才能行走。4. 在同一个机器人工厂购买机器人的花费是相同的,但是在不同机器人工厂购买机器人的花费不一定相同。5. 购买机器人花费的金币,在游戏结束时再从小新收集的金币中扣除,所以在游戏过程中小新不用担心因金币不足,无法购买机器人而导致游戏
15、无法进行。也因为如此,游戏结束后,收集的金币数量可能为负。现在已知每段马路上每个单位时间内出现的金币数量和在每个机器人工厂购买机器人需要的花费,请你告诉小新,经过 m 个单位时间后,扣除购买机器人的花费,小新最多能收集到多少金币。【输入】第一行 3 个正整数, n,m ,p,意义如题目所述。接下来的 n 行,每行有 m 个正整数, 每两个整数之间用一个空格隔开,其中第 i 行描述了 i 号马路上每个单位时间内出现的金币数量(1 金币数量 100 ),即第 i 行的第 j (1 j m )个数表示第 j 个单位时间内 i 号马路上出现的金币数量。最后一行, 有 n 个整数,每两个整数之间用一个空
16、格隔开,其中第 i 个数表示在 i 号机器人工厂购买机器人需要花费的金币数量(1 金币数量 100 )。【输出】共一行,包含 1 个整数,表示在m 个单位时间内,扣除购买机器人花费的金币之后,小新最多能收集到多少金币。【输入样例】2 3 2 1 2 3 2 3 4 1 2 【输出样例】5 【数据范围】对于 40%的数据, 2 n 40 ,1 m 40 。对于 90%的数据, 2 n 200 ,1 m 200 。对于 100%的数据, 2 n 1000 ,1 m 1000 ,1 p m 。7、电脑游戏 (game.c/game.cpp) 【问题描述】小新正在玩一个简单的电脑游戏。游戏中有一条环形
17、马路,马路上有n 个机器人工厂,两个相邻机器人工厂之间由一小段马路连接。小新以某个机器人工厂为起点,按顺时针顺序依次将这n 个机器人工厂编号为1n,因为马路是环形的,所以第 n 个机器人工厂和第 1 个机器人工厂是由一段马路连接在一起的。小新将连接机器人工厂的这n 段马路也编号为1n,并规定第 i 段马路连接第 i 个机器人工厂和第i+1 个机器人工厂 (1 i n-1 ),第n 段马路连接第 n 个机器人工厂和第 1个机器人工厂。 游戏过程中, 每个单位时间内, 每段马路上都会出现一些金币,金币的数量会随着时间发生变化,即不同单位时间内同一段马路上出现的金币数量可能是不同的。小新需要机器人的
18、帮助才能收名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 9 页 - - - - - - - - - 集到马路上的金币。所需的机器人必须在机器人工厂用一些金币来购买,机器人一旦被购买,便会沿着环形马路按顺时针方向一直行走,在每个单位时间内行走一次,即从当前所在的机器人工厂到达相邻的下一个机器人工厂,并将经过的马路上的所有金币收集给小新,例如,小新在i (1 i n )号机器人工厂购买了一个机器人,这个机器人会从i 号机器人工厂开始,顺时针在马路上行走,第一次行走会经过i
19、号马路,到达 i+1 号机器人工厂(如果i=n ,机器人会到达第1 个机器人工厂),并将i 号马路上的所有金币收集给小新。游戏中,环形马路上不能同时存在2 个或者 2 个以上的机器人,并且每个机器人最多能够在环形马路上行走p 次。小新购买机器人的同时,需要给这个机器人设定行走次数,行走次数可以为1p 之间的任意整数。当马路上的机器人行走完规定的次数之后会自动消失,小新必须立刻在任意一个机器人工厂中购买一个新的机器人,并给新的机器人设定新的行走次数。以下是游戏的一些补充说明:1. 游戏从小新第一次购买机器人开始计时。2. 购买机器人和设定机器人的行走次数是瞬间完成的,不需要花费时间。3. 购买机
20、器人和机器人行走是两个独立的过程,机器人行走时不能购买机器人,购买完机器人并且设定机器人行走次数之后机器人才能行走。4. 在同一个机器人工厂购买机器人的花费是相同的,但是在不同机器人工厂购买机器人的花费不一定相同。5. 购买机器人花费的金币,在游戏结束时再从小新收集的金币中扣除,所以在游戏过程中小新不用担心因金币不足,无法购买机器人而导致游戏无法进行。也因为如此,游戏结束后,收集的金币数量可能为负。现在已知每段马路上每个单位时间内出现的金币数量和在每个机器人工厂购买机器人需要的花费,请你告诉小新,经过 m 个单位时间后,扣除购买机器人的花费,小新最多能收集到多少金币。【输入】第一行 3 个正整
21、数, n,m ,p,意义如题目所述。接下来的 n 行,每行有 m 个正整数, 每两个整数之间用一个空格隔开,其中第 i 行描述了 i 号马路上每个单位时间内出现的金币数量(1 金币数量 100 ),即第 i 行的第 j (1 j m )个数表示第 j 个单位时间内 i 号马路上出现的金币数量。最后一行, 有 n 个整数,每两个整数之间用一个空格隔开,其中第 i 个数表示在 i 号机器人工厂购买机器人需要花费的金币数量(1 金币数量 100 )。【输出】共一行,包含 1 个整数,表示在m 个单位时间内,扣除购买机器人花费的金币之后,小新最多能收集到多少金币。【输入样例】2 3 2 1 2 3 2
22、 3 4 1 2 【输出样例】5 【数据范围】对于 40%的数据, 2 n 40 ,1 m 40 。对于 90%的数据, 2 n 200 ,1 m 200 。对于 100%的数据, 2 n 1000 ,1 m 1000 ,1 p m 。答案第一题include int x=1; void main() int a; void fun(int a); printf( 请输入一个四位数:); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 9 页 - - - - - - -
23、- - scanf(%d,&a); fun(a); printf(%dn,x); void fun(int a) int i,j,m,n,s4,t; s0=a/1000,s1=a/100%10,s2=a/10%10,s3=a%10; for(i=0;i3;i+) for(j=i+1;j4;j+) if(sisj) t=si,si=sj,sj=t; m=1000*s0+100*s1+10*s2+s3; n=1000*s3+100*s2+10*s1+s0; if(m-n!=6174&x=7) x+, fun(m-n); 第二题#include void main() int m,n,k=0,i,j
24、,a20; printf( 请输入十进制数字及转换进制用空格分开: ); scanf(%d %d,&m,&n); for(k;m/n!=0;k+) ak=m%n; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 9 页 - - - - - - - - - m=m/n; ak=m; for(j=0;j=0;i-) if(ai97) printf(%d,ai); else printf(%c,ai); printf(n); 第三题#include void main() in
25、t m,n,i,a5000,b5000,f,j,k,z,l,t1,t2,s,d,v,p,g; printf(Please input the total number and enrollment in :); scanf(%d %d,&n,&m); for(i=0;in;i+) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 9 页 - - - - - - - - - printf(Please enter the %d number and grade,i+1) ;
26、scanf(%d %d,&ai,&bi); printf(n); for(z=0;zn-1;z+) for(l=z+1;ln;l+) if(bzbl) t1=bz,bz=bl,bl=t1,t2=az,az=al,al=t2; for(k=0;kn;k+) for(v=k+1;vav) t1=bk,bk=bv,bv=t1,t2=ak,ak=av,av=t2; f=m*1.5; for(g=f;g=n;g+) if(bf-1=bf) f+; printf(interview scores for the actual interview number is%d %dn,bf-1,f); for(s
27、=0;sf;s+) printf(%d %dn,as,bs); 第四题#include void main() int i,j,k,n,m=0,l=0,a20,t1,t2,t; printf( 请输入待选商品总数:); scanf(%d,&n); printf(n); printf( 请输入各待选商品的价格); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 9 页 - - - - - - - - - while(ln-1) scanf(%d ,&al); l+; printf(n); for(i=0;in;i+) for(j=0;jn&j!=i;j+) for(k=0;k=aj&aj=ak) m+; printf(%dn,m); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 9 页 - - - - - - - - -
限制150内