第六届程序设计比赛题目与答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、鸡兔同笼

问题描述

一个笼子里面关了鸡和兔子(鸡有2只脚,兔子有4只脚,没有例外)。已经知道了笼子里面脚的总数a,问笼子里面至少有多少只动物,至多有多少只动物

输入数据

第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整数a (a < 32768)。

输出要求

n行,每行输出对应一个输入。输出是两个正整数,第一个是最少的动物数,第二个是最多的动物数,两个正整数用空格分开。如果没有满足要求的情况出现,则输出2个0。

输入样例

2

3

20

输出样例

0 0

5 10

解题思路

这个问题可以描述成任给一个整数N,如果N是奇数,输出0 0,否则如果N是4的倍数,输出N / 4 N / 2,如果N不是4的倍数,输出N/4+1 N/2。这是一个一般的计算题,只要实现相应的判断和输出代码就可以了。题目中说明了输入整数在一个比较小的范围内,所以只需要考虑整数运算就可以了。

参考程序

1.#include

2.void main( )

3.{

4.int nCases, i, nFeet; //nCases 表示输入测试数据的组数,nFeet表示输入的脚数。

5.scanf("%d", &nCases);

6.for(i = 0; i < nCases; i++){

7.scanf("%d", &nFeet);

8.if(nFeet %2 != 0) // 如果有奇数只脚,则输入不正确,

9.// 因为不论2只还是4只,都是偶数

10.printf("0 0\n");

11.else if (nFeet%4 != 0) //若要动物数目最少,使动物尽量有4只脚

12.//若要动物数目最多,使动物尽量有2只脚

13.printf("%d %d\n", nFeet / 4 + 1, nFeet / 2);

14.else printf("%d %d\n", nFeet / 4, nFeet / 2);

15.}

16.}

二、判断闰年

问题描述

判断某年是否是闰年。公历纪年法中,能被4整除的大多是闰年,但能被100整除而不能被400整除的年份不是闰年,如1900年是平年,2000年是闰年。

输入数据

一行,仅含一个整数a(0 < a < 3000)。

输出要求

一行,如果公元a年是闰年输出Y,否则输出N。

输入样例

2006

输出样例

N

解题思路

这个题目主要考察闰年的定义,使用基本的逻辑判断语句就可以了。考虑到输入的范围在0到3000之间,所以判断闰年时不必考虑能被3200整除的年份不是闰年的判定条件。

程序应该包括三个基本的步骤:正确读入要判定的年份a;判定a是否为闰年;给出正确的输出。其中,判断输入年份是否为闰年根据个人的思考习惯可以有不同的判定顺序。

参考解法一–分段排除:

如果a % 4 ! = 0,则a不是闰年;

否则如果a % 100 == 0 && a % 400 != 0,则a不是闰年;

否则a是闰年。

参考解法二–列出所有闰年的可能条件,满足条件则为闰年,否则判为非闰年:

如果(a % 400 == 0 || (a % 4 == 0 && a % 100 != 0)), 则a是闰年;否则a不是闰年。

参考程序一:

1.#include

2.void main()

3.{

4.int a; //记录待判定的年份

5.scanf("%d", &a);

6.if(a % 4 != 0)

7.printf("N\n");

8.else if(a % 100 == 0 && a % 400 != 0)

9.printf("N\n");

10.else

11.printf("Y\n");

12.}

参考程序二:

1.#include

2.void main(){

3.int a;

4.scanf("%d", &a);

5.if((a % 4 == 0 && a % 100 != 0) || a % 400 == 0)

6.printf("Y\n");

7.else

8.printf("N\n");

9.}

三、细菌繁殖

问题描述

一种细菌的繁殖速度是每天成倍增长。例如:第一天有10个,第二天就变成20个,第三天变成40个,第四天变成80个,……。现在给出第一天的日期和细菌数目,要你写程序求出到某一天的时候,细菌的数目。

输入数据

第一行有一个整数n,表示测试数据的数目。其后n行每行有5个整数,整数之间用一个空格隔开。第一个数表示第一天的月份,第二个数表示第一天的日期,第三个数表示第一天细菌的数目,第四个数表示要求的那一天的月份,第五个数表示要求的那一天的日期。已知第一天和要求的一天在同一年并且该年不是闰年,要求的一天一定在第一天之后。数据保证要求的一天的细菌数目在整数范围内。

输出要求

对于每一组测试数据,输出一行,该行包含一个整数,为要求的一天的细菌数。

输入样例

2

1 1 1 1 2

2 28 10

3 2

输出样例

2

40

解题思路

这题实际上是求给定的两天之间间隔的天数n,第一天的细菌数乘以2的n次方就是题目的答案。每个月的天数因为不很规则,如果在程序中用规则描述会比较麻烦,所以可以使用一个数组将每个月的天数存起来。整个计算过程可以描述如下:

读入测试样例数n;

做n次:1. 读入两个日期及第一天的细菌数;

2. 将两个日期转换为当年的第几天;

3.得到两个天数的差,即它们中间间隔的天数m;

4.用第一天的细菌数乘以2的m次方等到x;

5. 输出x;

参考程序

参考程序一:// 作者c061000208013

1.#include

相关文档
最新文档