c语言程序设计大赛 作品,C语言程序设计大赛题目.pdf

程序设计大赛训练题

(1)请写一个程式求出2个数的GCD(最大公因数)

Input andOutput

输入包含好几笔资料 ,每笔资料一行 ,包含2个整数a,b 。(0

00代表输入结束 。

对每行输入 ,输出这2个数的GCD

SampleInput

12 36

2524

00

SampleOutput

GCD(12,36) 12

GCD(25,24) 1)

(2)联集

读入2 个正整数a,b,请输出介于a,b 之间 (包含a,b)2,3,5倍数的联集大小。

Input (输入可能包含了好几列测试资料,每一列有2个整数a,b。

a 0 b 0 代表输入结束。)

Output (对每一列输入,请输出联集的大小。请参考Sample Output )

Sample Input (1 10 ;10 20;0 0;)

Sample Output (8;7)

(3)Q100: The 3n + 1 problem

考虑以下的演算法:

1. 输入 n

2. 印出 n

3. 如果 n 1 结束

4. 如果 n 是奇数 那么 n 3*n+1

5. 否则 n n/2

6. GOTO 2

例如输入 22, 得到的数列: 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1

据推测此演算法对任何整数而言会终止 (当列印出 1 的时候)。虽然此演算法很

简单,但以上的推测是否真实却无法知道。然而对所有的n (0

来说,以上的推测已经被验证是正确的。

给一个输入 n ,透过以上的演算法我们可以得到一个数列 (1作为结尾)。此数

列的长度称为n 的cycle-length。上面提到的例子, 22的 cycle length为

16.

问题来了:对任意2个整数i,j我们想要知道介于i,j (包含i,j)之间的数

所产生的数列中最大的cycle length是多少。

Input:输入可能包含了好几列测试资料,每一列有一对整数资料 i,j 。 (0<

i,j < 10000 )

Output:对每一对输入 i , j你应该要输出 i, j和介于i, j之间的数所产生

的数列中最大的cycle length。

Sample Input:1 10;10 1;100 200;201 210;900 1000;

Sample Output

1 10 20

10 1 20

100 200 125

201 210 89

900 1000 174

(4)Q101: The Blocks Problem

在早期人工智慧的领域中常常会用到机器人,在这个问题中有一支机器手臂接受

指令来搬动积木,而你的任务就是输出最后积木的情形。一开始在一平坦的桌面

上有n块积木 (编号从0到n-1)0号积木放在0号位置上,1号积木放在1号

位置上,依此类推,如下图。

机器手臂有以下

几种合法搬积木的方式 (a和b是积木的编号):

move a onto b

在将a搬到b上之前,先将a和b上的积木放回原来的位置 (例如:1就放

回1的最开始位罝)

 move a over b

在将a搬到b所在的那堆积木之上之前,先将a上的积木放回原来的位罝

(b所在的那堆积木不动)

 pile a onto b

将a本身和其上的积木一起放到b上,在搬之前b上方的积木放回原位

 pile a over b

将a本身和其上的积木一起搬到到b所在的那堆积木之上

 quit

动作结束

 前四个动作中若a b,或者a, b在同一堆积木中,那么这样的动作算是

不合法的。所有不合法的动作应该被忽略,也就是对各积木均无改变。

Input输入含有多组测试资料,每组测试资料的第一列有一个

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值