c语言竞赛题目精选.docx
- 文档编号:8635440
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:28
- 大小:31.83KB
c语言竞赛题目精选.docx
《c语言竞赛题目精选.docx》由会员分享,可在线阅读,更多相关《c语言竞赛题目精选.docx(28页珍藏版)》请在冰豆网上搜索。
c语言竞赛题目精选
*********************************************************************
1、过滤出1--10000之间所有相邻两位数相同的,比如12336等过滤掉,剩下的数据输出并计算个数。
2、一辆卡车违反交通规则,撞人后逃跑。
现场有三人目击事件,但都没记住车号,只记下车号的一些特征。
甲说:
拍照的前两位数字是相同的;乙说:
牌照的后两位数字是相同的,但与前两位不同;并使数学家,他说:
四位的车号刚好是一个整数的平方。
请根据以上线索编程求出车号。
3、一辆汽车加满油后,可行使n千米。
旅途中有若干个加油站。
若要使沿途加油次数最少,设计一个有效算法,对于给定的n和k个加油站位置,指出应在那些加油站停靠加油才能使加油次数最少。
输入数据中,第一行有2个正整数,分别表示汽车加满油后可行使n千米,且旅途中有k个加油站。
接下来的1行中,有k+1个整数,表示第k个加油站与第k-1个加油站之间的距离。
第0个加油站表示出发地,汽车已加满油。
第k+1个加油站表示目地地。
输出为最少的加油次数,如果无法到达目的地,则输出“NoSolution”。
提示:
把两加油站的距离放在数组中,a[1..k]表示从起始位置开始跑,经过k个加油站,a[i]表示第i-1个加油站到第i个加油站的距离。
汽车在运行的过程中如果能跑到下一个站则不加油,否则要加油。
输入数据示例
77
12345166
输出数据
4
4、在一个黑袋中共有m个白球和n个黑球(m,n>0),袋外还有一些白球。
每次随机从袋中取出两球,若取出的球颜色相同,则放回一白球;若取出两球颜色不同,则放回一黑球,直到取完(取出最后两球不放回)。
请编程求多少种取法,并说明最后两球的颜色。
(用递归方法求解)
5、一个长1000单元的数组,每单元按序列放数据,(从0单元开始一次放入1,2,3,...,1000),输入m,n,m表示从m单元开始取出长度n的数据,插入到0单元前面,0到m-1单元一次后移到取出数据位置,经过连续k次操作后,每次m,n数据不同,最后输出这1000单元数组中的数据。
输入数据示例(3表示k=3,以下三行是m,n的值)。
3
9,8
18,9
100,89
*******************************************************************************
第二题:
用迭代法求2的平方根
doublen=2;doublea=0;doubleb=n;
while(fabs(a-b)>1E-15)
{
a=(a+b)/2;b=________;
}
printf("%f\n",a);
第五题:
轮转数(每个字符依次向右移)
例:
字符串abcd经过一次轮转后为dabc此时位移记作1
字符串abcd进过两次轮转后为cdab此时位移记作2
以下代码为求字符串S,经过n次位移后的新字符串
voidshift(char*s,intn)
{
char*p;
char*q;
intlen=strlen(s);
if(len==0)return;
char*s2=(char*)malloc(_______);
p=s;
q=s2+n%len;
while(*p)
{
*q++=*p++;
if((q-s2)=len)
{
*q=_____;
q=s2;
}
}
strcpy(s,s2);
free(s2);
}
第六题:
金字塔数
space为塔底边距离左边的空白长度
x塔底中心字母
例:
当space=0,x='C'
输出:
A
ABA
ABCBA
当space=2,x='E'
A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
voidh(intspace,charx)
{
inti;
if(x<'A'||x>'Z')return;
_________________;
for(i=0;i for(i=0;i for(i=0;i<=x-'A';i++)printf("%c"____); printf("\n"); } 第七题: 中奖计算函数返回所中的最大连续数字的个数 intg(inta,intb) { charsa[]="00000000"; charsb[]="00000000"; intn; inti,j; sprintf(sa,"%8d",a); sprintf(sb,"%8d",b); for(i=0;i<8;i++) { for(j=1;j<=8-i;j++) { chart=______; sa[i+j]=0; if(strstr(sb,sa+i)) { if(j>n)________; } sa[i+j]=t; } } returnn; } ******************************************************************************* 一、倒序数是将一个阿拉伯数的各位上的数字以逆序的形式写成的数。 该阿拉伯数的第一位变成最后位,最后位变成第一位。 例如数1245被写成5421。 注意产生的新数字前边所有的数字0是被略去的。 倒序数的尾部无多余的数字0。 请将阿拉伯数转变为倒序数。 输入 输入的第一行仅有一个正整数n,表示有n组测试数据。 接下来有n行,每一行是一组测试数据,长度不超过100。 每一行上的字符串表示一个非负整数,它是你需要转换的数。 输出 对每一组测试数据在一行上输出倒序数,该倒序数中前导的数字0被略去了。 输入样例输出样例 3 2442 43400434 305503(25分) 二、对一个正整数n,求出n! 中末尾0的个数。 输入 输入有若干行。 每一行上有一个整数T,是测试数据组数,接着有T行,每一行包含一个确定的正整数n(n≤1000000000)。 输出 对输入行中的每一个数据n,输出一行,其内容是n! 中末尾0的个数。 输入样例输出样例 3 30 10024 1024253(25分) 三、给定两个字符串a和b,定义式子a*b表示两个字符串的连接。 例如a=“abc”,b=“def”,则a*b=“abcdef”。 如果将连接看成乘法,则按照普遍的方法,一个非负整数的幂表示为: a0=“”(theemptystring), a(n+1)=a*(an)。 输入 输入字符串s,每组样例一行,s为可打印字符。 s的长度在1—1000000之间。 最后一组数据后为句号(.)。 输出 每个字符串s输出最大的n满足s=an,其中a为任意字符串。 输入样例输出样例 abcd1 aaaa4 ababab3(25分) 四、若两个正整数的和为素数,则这两个正整数称之为“素数伴侣”,如2和5、6和13,它们能应用于通信加密。 现在密码学会请你设计一个程序,从已有的N(N为偶数)个正整数中挑选出若干对组成“素数伴侣”,挑选方案多种多样,例如有4个正整数: 2,5,6,13,如果将5和6分为一组中只能得到一组“素数伴侣”,而将2和5、6和13编组将得到两组“素数伴侣”,能组成“素数伴侣”最多的方案称为“最佳方案”,当然密码学会希望你寻找出“最佳方案”。 输入 输入文件的第一行有一个正偶数N(N≤200),表示待挑选的自然数的个数。 第二行给出N个不超过30000的正整数,相邻的两个数之间用一个空格分开。 输出 对每个正整数,输出一个整数K,表示你求得的“最佳方案”组成“素数伴侣”的对数。 输入样例输出样例 42 25613 ******************************************************************************* 蛇行矩阵 【问题描述】 蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。 【要求】 【数据输入】本题有多组数据,每组数据由一个正整数N组成。 (N不大于100) 【数据输出】对于每一组数据,输出一个N行的蛇形矩阵。 两组输出之间不要额外的空行。 矩阵三角中同一行的数字用一个空格分开。 行尾不要多余的空格。 【样例输入】 5 【样例输出】 1361015 25914 4813 712 11 敲七 【问题描述】 输出7和7的倍数,还有包含7的数字例如(17,27,37...70,71,72,73...) 【要求】 【数据输入】一个整数N。 (N不大于30000) 【数据输出】从小到大排列的不大于N的与7有关的数字,每行一个。 【样例输入】 20 【样例输出】 7 14 17 小希的数表 【问题描述】 Gardon昨天给小希布置了一道作业,即根据一张由不超过5000的N(3<=N<=100)个正整数组成的数表两两相加得到N*(N-1)/2个和,然后再将它们排序。 例如,如果数表里含有四个数1,3,4,9,那么正确答案是4,5,7,10,12,13。 小希做完作业以后出去玩了一阵,可是下午回家时发现原来的那张数表不见了,好在她做出的答案还在,你能帮助她根据她的答案计算出原来的数表么? 【要求】 【数据输入】包含多组数据,每组数据以一个N开头,接下来的一行有按照大小顺序排列的N*(N-1)/2个数,是小希完成的答案。 文件最后以一个0结束。 假设输入保证解的存在性和唯一性。 【数据输出】对于每组数据,输出原来的数表。 它们也应当是按照顺序排列的。 【样例输入】 4 457101213 4 5678910 0 【样例输出】 1349 2346 士兵队列训练问题 TimeLimit: 2000/1000MS(Java/Others)MemoryLimit: 65536/32768K(Java/Others) TotalSubmission(s): 462AcceptedSubmission(s): 185 【问题描述】 某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下: 从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠拢,再从头开始进行一至三报数,凡报到三的出列,剩下的向小序号方向靠拢,继续从头开始进行一至二报数。 。 。 ,以后从头开始轮流进行一至二报数、一至三报数直到剩下的人数不超过三人为止。 【要求】 【数据输入】本题有多个测试数据组,第一行为组数N,接着为N行新兵人数,新兵人数不超过5000。 【数据输出】共有N行,分别对应输入的新兵人数,每行输出剩下的新兵最初的编号,编号之间有一个空格。 【样例输入】 2 20 40 【样例输出】 1719 11937 最简单的计算机 TimeLimit: 2000/1000MS(Java/Others)MemoryLimit: 65536/32768K(Java/Others) TotalSubmission(s): 287AcceptedSubmission(s): 192 【问题描述】 一个名叫是PigHeadThree的研究组织设计了一台实验用的计算机,命名为PpMm。 PpMm只能执行简单的六种命令A,B,C,D,E,F;只有二个内存M1,M2;三个寄存器R1,R2,R3。 六种命令的含义如下: 命令A: 将内存M1的数据装到寄存器R1中; 命令B: 将内存M2的数据装到寄存器R2中; 命令C: 将寄存器R3的数据装到内存M1中; 命令D: 将寄存器R3的数据装到内存M2中; 命令E: 将寄存器R1中的数据和寄存器R2中的数据相加,结果放到寄存器R3中; 命令F: 将寄存器R1中的数据和寄存器R2中的数据相减,结果放到寄存器R3中。 你的任务是: 设计一个程序模拟PpMm的运行。 【要求】 【数据输入】有若干组,每组有2行,第一行是2个整数,分别表示M1和M2中的初始内容;第二行是一串长度不超过200的由大写字母A到F组成的命令串,命令串的含义如上所述。 【数据输出】对应每一组的输入,输出只有一行,二个整数,分别表示M1,M2的内容;其中M1和M2之间用逗号隔开。 其他说明: R1,R2,R3的初始值为0,所有中间结果都在-2^31和2^31之间。 【样例输入】 100288 ABECED 876356321456 ABECAEDBECAF 【数据输出】 388,388 2717080,1519268 整数对 TimeLimit: 2000/1000MS(Java/Others)MemoryLimit: 65536/32768K(Java/Others) TotalSubmission(s): 111AcceptedSubmission(s): 29 【问题描述】 Gardon和小希玩了一个游戏,Gardon随便想了一个数A(首位不能为0),把它去掉一个数字以后得到另外一个数B,他把A和B的和N告诉了小希,让小希猜想他原来想的数字。 不过为了公平起见,如果小希回答的数虽然不是A,但同样能达到那个条件(去掉其中的一个数字得到B,A和B之和是N),一样算小希胜利。 而且小希如果能答出多个符合条件的数字,就可以得到额外的糖果。 所以现在小希希望你编写一个程序,来帮助她找到尽可能多的解。 例如,Gardon想的是A=31,B=3告诉小希N=34, 小希除了回答31以外还可以回答27(27+7=34)所以小希可以因此而得到一个额外的糖果。 【要求】 【数据输入】输入包含多组数据,每组数据一行,包含一个数N(1<=N<=10^9),文件以0结尾。 【数据输出】对于每个输入的N,输出所有符合要求的解(按照大小顺序排列)如果没有这样的解,输出"Nosolution." 【样例输入】 34 152 21 0 【样例输出】 273132 126136139141 Nosolution. 3n+1数链问题 Timelimit: 1sMemorylimit: 32768K TotalSubmit: 471AcceptedSubmit: 325 【问题描述】 在计算机科学上,有很多类问题是无法解决的,我们称之为不可解决问题。 然而,在很多情况我们并不知道哪一类问题可以解决,那一类问题不可解决。 现在我们就有这样一个问题,问题如下: 1.输入一个正整数n; 2.把n显示出来; 3.如果n=1则结束; 4.如果n是奇数则n变为,否则n变为n/2; 5.转入第2步。 例如对于输入的正整数22,应该有如下数列被显示出来: 221134175226134020105168421 我们推测: 对于任意一个正整数,经过以上算法最终会推到1。 尽管这个算法很简单,但我们仍然无法确定我们的推断是否正确。 不过好在我们有计算机,我们验证了对于小于1,000,000的正整数都满足以上推断。 对于给定的正整数n,我们把显示出来的数的个数定义为n的链长,例如22的链长为16。 你的任务是编写一个程序,对于任意一对正整数i和j,给出i、j之间的最长链长,当然这个最长链长是由i、j之间的其中一个正整数产生的。 我们这里的i、j之间即包括i也包括j。 【要求】 【数据输入】输入文件只有一行,即为正整数i和j,i和j之间以一个空格隔开。 0 【数据输出】文件只能有一行,即为i、j之间的最长链长。 【样例输入】 110 【样例输出】 20 数制转换 Timelimit: 1sMemorylimit: 32768K TotalSubmit: 479AcceptedSubmit: 190 【问题描述】 有一种数制的基数是3,权值可以取-1,0,1,并分别用符号-,0,1表示,如这种数制的101表示十进制数的10,即1*(3^2)+0*(3^1)+1*(3^0)=10,又如这种数制的-0表示十进制数的-3,即-1*(3^1)+0*(3^0)=-3。 编程要求把给定的有符号整数转换为新数制的数,该数的前面不能有多余的0,如10的新数制表示是101,则不要输出成0101。 【要求】 【数据输入】文件有一行或多行,每行有一个整数N(-2,147,483,647≤N≤2,147,483,647),整数内不会有其他分隔符。 【数据输出】对输入文件的每一行输出一行,该行是输入行的整数的新数制表示,不能有多余空行,每行之前不能有前导空格。 【样例输入】 10 -3 【样例输出】 101 -0 矩阵取数游戏 Timelimit: 1sMemorylimit: 32768K TotalSubmit: 150AcceptedSubmit: 27 【问题描述】 帅帅经常跟同学玩一个矩阵取数游戏: 对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数。 游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个。 m次后取完矩阵所有元素; 2.每次取走的各个元素只能是该元素所在行的行首或行尾; 3.每次取数都有一个得分值,为每行取数的得分之和,每行取数的得分=被取走的元素值*2i,其中i表示第i次取数(从1开始编号); 4.游戏结束总得分为m次取数得分之和。 帅帅想请你帮忙写一个程序,对于任意矩阵,可以求出取数后的最大得分。 【要求】 【数据输入】输入有多个测试数据,每个包括n+1行: 第1行为两个用空格隔开的整数n和m。 第2~n+1行为n*m矩阵,其中每行有m个用单个空格隔开的非负整数。 1<=n,m<=80,0<=aij<=1000 【数据输出】对每个数据,输出一行,为一个整数,即输入矩阵取数后的最大得分。 相邻两个输出间用一个空行隔开。 【样例输入】 14 4505 210 96565446861223888043 16951829305388836467 【样例输出】 122 316994 埃及分数 【问题描述】 在古埃及,人们使用单位分数的和(形如1/a的,a是自然数)表示一切有理数。 如: 2/3=1/2+1/6,但不允许2/3=1/3+1/3,因为加数中有相同的。 对于一个分数a/b,表示方法有很多种,但是哪种最好呢? 首先,加数少的比加数多的好,其次,加数个数相同的,最小的分数越大越好。 如: 19/45=1/3+1/12+1/180 19/45=1/3+1/15+1/45 19/45=1/3+1/18+1/30, 19/45=1/4+1/6+1/180 19/45=1/5+1/6+1/18. 最好的是最后一种,因为1/18比1/180,1/45,1/30,1/180都大。 给出a,b(0〈a〈b〈1000),编程计算最好的表达方式。 【要求】 【数据输入】第一行: N表示有N组测试数据,每组测试数据为一行包含a,b(0〈a〈b〈1000)。 【数据输出】每组测试数据若干个数,自小到大排列,依次是单位分数的分母。 【样例输入】 1 1945 【样例输出】 5618 H数 timelimit: 1seconds memlimit: 32768K Prev|Next 【问题描述】 让我们来做做DavidHilbert的一个练习题. 定义H数为4的正整数倍加1,比如: 1,5,9,13,17,21,25...都是H数.可以证明两个H数相乘结果还是H数.类似于整数,我们也可以把H数分为1,H素数和H合数.一个H数为H素数,当且仅当,它除了1和自己之外,没有其他的H数整除它.除了1和H素数外,其他的H数都是H合数.比如9是H素数,因为除了1和9之外没有其他的H数整除9;17和21也是H素数;45是H合数,45=5×9,25也是H合数,因为25=5×5. 你的任务是计算H半素数的个数.一个H数是H半素数,当且仅当,它能分解成两个H素数的乘积. 这两个H素数可以是同一个数.比如25是H半素数,25=5×5。 45也是H半素数,45=5×9,而125不是H半 素数,125=5×5×5,它可以分解成3个H素数的乘积. 给你一个H数n,要求你输出有多少个不大于n的H半素数. 【要求】 【数据输入】输入包括多组数据,每组数据输出一行,包括一个整数n,(n≤1,000,001) 最后一行为一个0,表示输入结束. 【数据输出】每个输入数据输出一行,先输出n,然后输出小于等于n的H数中有几个是H半素数,这两个数用一个空格隔开 【样例输入】 21 85 789 0 【样例输出】 210 855 78962 数列找数 TimeLimit: 1000MSMemoryLimit: 65536K TotalSubmit: 635Accepted: 263 【问题描述】 在一个数组A(N)各下标变量中存储N个互不相等的数,键盘输入正整数M(M≤N),要求打印出数组中第M大的下标变量的值。 例如: 数组A(10)的数据为: A (1),A (2),A(3),A(4),A(5),A(6),A(7),A(8),A(9),A(10) 16,57,20,19,38,41,6,13,25,32 M=3时的运行结果为: A(5)=38(即第3大的数是A(5)=38) 【要求】 【数据输入】第一行为测试的数据的组数k,说明共有K组数据,每一组有两行。 每组中第一行为N,M,第二行为N个下标变量的值。 【数据输出】输出每一组数据中符合要求的下标值和下标变量值。 【样例输入】 2 51 68345 32 123 【样例输出】 A (2)=8 A (2)=2 绝对值排序 TimeLimit: 1000MSMemoryLimit: 65536K TotalSubmit: 79Accepted: 50 【问题描述】 输入n(n<=100)个整数,按照绝对值从大到小排序后输出。 题目保证对于每一个测试实例,所有的数的绝对值都不相等。 【要求】 【数据输入】输入数据有多组,每组占一行,每行的第一个数字为n,接着是n个整数,n=0表示输入数据的结束,不做处理。 【数据输出】对于每个测试实例,输出排序后的结果,两个数之间用一个空格隔开。 每个测试实例占一行。 【样例输入】 33-42 4012-3 0 【样例输出】 -432 -3210 求逆序对个数 TimeLimit: 1000MSMemoryLimit: 65536K TotalSubmit: 64Accepted: 28 【问题描述】 有一实数或者字母序列A[1]、A
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 竞赛 题目 精选