c语言竞赛题目精选.docx

上传人:b****5 文档编号:8635440 上传时间:2023-02-01 格式:DOCX 页数:28 大小:31.83KB
下载 相关 举报
c语言竞赛题目精选.docx_第1页
第1页 / 共28页
c语言竞赛题目精选.docx_第2页
第2页 / 共28页
c语言竞赛题目精选.docx_第3页
第3页 / 共28页
c语言竞赛题目精选.docx_第4页
第4页 / 共28页
c语言竞赛题目精选.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

c语言竞赛题目精选.docx

《c语言竞赛题目精选.docx》由会员分享,可在线阅读,更多相关《c语言竞赛题目精选.docx(28页珍藏版)》请在冰豆网上搜索。

c语言竞赛题目精选.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1