搜档网
当前位置:搜档网 › 第六届程序设计比赛题目与答案

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

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

一、鸡兔同笼

问题描述

一个笼子里面关了鸡和兔子(鸡有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

2.void main( )

3.{

4.int days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

5.int n;

6.int i;

7.int sum;

8.int k;

9.long nNum;

10.scanf("%d", &n);

11.for(i = 0; i < n; i ++){

12.int month_1, day_1, month_2, day_2, num; //起止日期的月份和日期。

13.scanf("%d%d%d%d%d", &month_1, &day_1, &num,&month_2, &day_2);

14.sum = 0;

15.for(k = month_1; k < month_2; k ++){

16.sum += days[k - 1];

17.}

18.sum -= day_1;

19.sum += day_2;

20.

21.nNum = num;

22.for(k = 0; k < sum; k ++){

23.nNum *= 2;

24.}

25.printf("%d\n", nNum);

26.}

27.}

28.

参考程序二:// 作者c060100548302

1.#include

2.int month[]={0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

3.void main()

4.{

5.int times;

6.scanf("%d", ×);

7.int mon1, date1, mon2, date2, num1;

8.while(times --){

9.scanf("%d%d%d%d%d", &mon1, &date1, &num1, &mon2, &date2);

10.int days = date2 - date1;

11.for(int i = mon1; i < mon2; i++){

12.days += month[i];

13.}

14.long num = num1;

15.for(int j = 0; j < days; j++){

16.num *= 2;

17.}

18.printf( "%d\n", num );

19.}

20.}

四、八皇后问题

问题描述

会下国际象棋的人都很清楚:皇后可以在横、竖、斜线上不限步数地吃掉其他棋子。如何将8个皇后放在棋盘上(有8 * 8个方格),使它们谁也不能被吃掉!这就是著名的八皇后问题。对于某个满足要求的8皇后的摆放方法,定义一个皇后串a与之对应,即a=b1b2 (8)

其中b i为相应摆法中第i行皇后所处的列数。已经知道8皇后问题一共有92组解(即92个不同的皇后串)。给出一个数b,要求输出第b个串。串的比较是这样的:皇后串x置于皇后串y之前,当且仅当将x视为整数时比y小。

输入数据

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

输出要求

n行,每行输出对应一个输入。输出应是一个正整数,是对应于b的皇后串

输入样例

2

1

92

输出样例

15863724

84136275

解题思路一

因为要求出92种不同摆放方法中的任意一种,所以我们不妨把92种不同的摆放方法一次性求出来,存放在一个数组里。为求解这道题我们需要有一个矩阵仿真棋盘,每次试放一个棋子时只能放在尚未被控制的格子上,一旦放置了一个新棋子,就在它所能控制的所有位置上设置标记,如此下去把八个棋子放好。当完成一种摆放时,就要尝试下一种。若要按照字典序将可行的摆放方法记录下来,就要按照一定的顺序进行尝试。也就是将第一个棋子按照从小到大的顺序尝试;对于第一个棋子的每一个位置,将第二个棋子从可行的位置从小到大的顺序尝试;在第一第二个棋子固定的情况下,将第三个棋子从可行的位置从小到大的顺序尝试;依次类推。

首先,我们有一个8*8的矩阵仿真棋盘标识当前已经摆放好的棋子所控制的区域。用一个有92行每行8个元素的二维数组记录可行的摆放方法。用一个递归程序来实现尝试摆放的过程。基本思想是假设我们将第一个棋子摆好,并设置了它所控制的区域,则这个问题变成了一个7皇后问题,用与8皇后同样的方法可以获得问题的解。那我们就把重心放在如何摆放一个皇后棋子上,摆放的基本步骤是:从第1到第8个位置,顺序地尝试将棋子放置在每一个未被控制的位置上,设置该棋子所控制的格子,将问题变为更小规模的问题向下递归,需要注意的是每次尝试一个新的未被控制的位置前,要将

上一次尝试的位置所控制的格子复原。

参考程序一

1.#include

2.#include

3.

4.int queenPlaces[92][8]; //存放92种皇后棋子的摆放方法

5.int count = 0;

6.int board[8][8]; //仿真棋盘

7.void putQueen(int ithQueen); //递归函数,每次摆好一个棋子

8.

9.void main()

10.{

11.int n, i, j;

12.for(i = 0; i < 8; i++){ // 初始化

13.for(j = 0; j < 8; j++)

14.board[i][j] = -1;

15.for(j = 0; j < 92; j++)

16.queenPlaces[j][i] = 0;

17.}

18.putQueen(0); //从第0个棋子开始摆放,运行的结果是将queenPlaces生成好

19.scanf("%d", &n);

20.for(i = 0; i < n; i++){

21.int ith;

22.scanf("%d", &ith);

23.for(j = 0; j < 8; j++)

24.printf("%d", queenPlaces[ith - 1][j]);

25.printf("\n");

26.}

27.}

28.void putQueen(int ithQueen){

29.int i, k, r;

30.if(ithQueen == 8){

31.count ++;

32.return;

33.}

34.for(i = 0; i < 8; i++){

35.if(board[i][ithQueen] == -1){

36.//摆放皇后

37.board[i][ithQueen] = ithQueen;

38.//将其后所有的摆放方法的第ith个皇后都放在i+1的位置上

39.//在i增加以后,后面的第ith个皇后摆放方法后覆盖此时的设置

40.for(k = count; k < 92; k++)

41.queenPlaces[k][ithQueen] = i + 1;

42.//设置控制范围

43.for(k = 0; k < 8; k++)

44.for(r = 0; r < 8; r++)

45.if(board[k][r] == -1 &&

46.(k == i || r == ithQueen || abs(k - i) == abs(r - ithQueen)))

47.board[k][r] = ithQueen;

48.//向下级递归

49.putQueen(ithQueen + 1);

50.//回溯,撤销控制范围

51.for(k = 0; k < 8; k++)

52.for(r = 0; r < 8; r++)

53.if(board[k][r] == ithQueen) board[k][r] = -1;

54.}

55.}

56.}

解题思路二

上面的方法用一个二维数组来记录棋盘被已经放置的棋子的控制情况,每次有新的棋子放置时用了枚举法来判断它控制的范围。还可以用三个一维数组来分别记录每一列,每个45度的斜线和每个135度的斜线上是否已经被已放置的棋子控制,这样每次有新的棋子放置时,不必再搜索它的控制范围,可以直接通过三个一维数组判断它是否与已经放置的棋子冲突,在不冲突的情况下,也可以通过分别设置三个一维数组的相应的值,来记录新棋子的控制范围。

参考程序二

1.#include

2.int record[92][9], mark[9], count = 0; //record记录全部解,mark记录当前解;

3.bool range[9], line1[17], line2[17]; //分别记录列方向,45度,135度方向上被控制的情况

4.void tryToPut(int ); //求全部解的过程

5.void main()

6.{

7.int i, testtimes, num;

8.scanf("%d", &testtimes);

9.

10.for(i = 0; i <=8; i++)

11.range[i] = true;

12.for(i = 0; i < 17; i ++)

13.line1[i] = line2[i] = true;

14.

15.tryToPut(1);

16.

17.while(testtimes --){

18.scanf("%d", &num);

19.for(i = 1; i <=8; i++)

20.printf("%d", record[num - 1][i]);

21.printf("\n");

22.}

23.}

24.

25.void tryToPut(int i){

26.if(i > 8){ //如果最后一个皇后被放置完毕,将当前解复制到全部解中

27.for(int k = 1; k < 9; k ++)

28.record[count][k] = mark[k];

29.count ++;

30.}

31.for(int j=1; j<=8; j++){ 逐一尝试将当前皇后放置在不同列上

32.if(range[j] && line1 [i + j] && line2[i - j + 9]){ //如果与前面的不冲突,

33.//则把当前皇后放置在当前位置

34.mark[i] = j;

35.range[j] = line1[i + j] = line2[i - j + 9] = false;

36.tryToPut(i + 1);

37.range[j] = line1[i + j] = line2[i - j + 9] = true;

38.}

39.}

40.}

解题思路三

这个题目也可以不用仿真棋盘来模拟已放置棋子的控制区域,而只用一个有8个元素的数组记录已经摆放的棋子摆在什么位置,当要放置一个新的棋子时,只需要判断它与已经放置的棋子之间是否冲突就行了。

参考程序三

1.#include

2.int ans[92][8], n, b, i, j, num, hang[8];

3.void queen(int i){

4.int j, k;

5.if(i == 8){ //一组新的解产生了

6.for(j = 0; j < 8; j++) ans[num][j] = hang[j] + 1;

7.num++;

8.return;

9.}

10.for (j=0; j<8; j++){ //将当前皇后i逐一尝试放置在不同的列

11.for(k=0; k

12.if( hang[k] == j || (k - i) == (hang[k] - j) || (i - k) == (hang[k] - j )) break;

13.if (k == i) { //放置i,尝试第i+1个皇后

14.hang[i] = j;

15.queen(i + 1);

16.}

17.}

18.}

19.void main( ){

20.num=0;

21.queen(0);

22.scanf(“%d”, &n);

23.for(i = 0; i < n; i++){

24.scanf(“%d”, &b);

25.for(j = 0; j < 8; j++) printf(“%d”, ans[b - 1][j]);

26.printf(“\n”);

27.}

28.}

1.

五、

# include

# include

# include

using namespace std;

int main(int argc,char* argv[])

{

ifstream cin ("aaa.txt");

string s,t;

int n;

cin>>n;

for (int i=0;i

{cin>>s;

int c=0;

t=s[0];

int temp=0;

for(int j=0;j

{

if(s[j]==t[0])

{

temp++;

if(j==s.size()-1)

{

if(temp==1)cout<

else cout<

}

}

else

{

if(temp==1)cout<

else cout<

t[0]=s[j];

temp=1;

if(j==s.size()-1)

{

if(temp==1)cout<

else cout<

}

}

}

cout<

s="";

}

return 0;

}

六、A New Stone Game

Description

Alice and Bob decide to play a new stone game.At the beginning of the game they pick n(1<=n<=10) piles of stones in a line. Alice and Bob move the stones in turn.

At each step of the game,the player choose a pile,remove at least one stones,then freely move stones from this pile to any other pile that still has stones.

For example:n=4 and the piles have (3,1,4,2) stones.If the player chose the first pile and remove one.Then it can reach the follow states.

2 1 4 2

1 2 4 2(move one stone to Pile 2)

1 1 5 2(move one stone to Pile 3)

1 1 4 3(move one stone to Pile 4)

0 2 5 2(move one stone to Pile 2 and another one to Pile 3)

0 2 4 3(move one stone to Pile 2 and another one to Pile 4)

0 1 5 3(move one stone to Pile 3 and another one to Pile 4)

0 3 4 2(move two stones to Pile 2)

0 1 6 2(move two stones to Pile 3)

0 1 4 4(move two stones to Pile 4)

Alice always moves first. Suppose that both Alice and Bob do their best in the game.

You are to write a program to determine who will finally win the game. Input

The input contains several test cases. The first line of each test case contains an integer number n, denoting the number of piles. The following n integers describe the number of stones in each pile at the beginning of the game, you may assume the number of stones in each pile will not exceed 100.

The last test case is followed by one zero.

Output

For each test case, if Alice win the game,output 1,otherwise output 0.

Sample Input

3

2 1 3

2

1 1

Sample Output

1

#include

#include

#include

#define MAXN 11

long h[MAXN];

long n;

bool Init()

{

long k;

cin>>n;

for (k=0;k>h[k];

return n!=0;

}

bool GirlWin()

{

long k;

if (n%2==1) return true;

std::sort(h,h+n);

for (k=0;k

if (h[k]!=h[k+1]) return true;

return false;

}

int main()

{

while (Init())

{

if (GirlWin()) cout<<1<

else cout<<0<

}

return 0;

}

七、Look and Say

来源

(https://www.sodocs.net/doc/0a18942947.html,/onlinejudge/showProblem.do?problemCode=2886)

The look and say sequence is defined as follows. Start with any string of digits as the first element in the sequence. Each subsequent element is defined from the previous one by "verbally" describing the previous element. For example, the string 122344111 can be described as "one 1, two 2's, one 3, two 4's, three 1's". Therefore, the element that comes after 122344111 in the sequence is 1122132431. Similarly, the string 101 comes after 1111111111. Notice that it is generally not possible to uniquely identify the previous element of a particular element. For example, a string of 112213243 1's also yields 1122132431 as the next element.

Input

The input consists of a number of cases. The first line gives the number of cases to follow. Each case consists of a line of up to 1000 digits.

Output

For each test case, print the string that follows the given string.

Sample Input

3

122344111 1111111111 12345

Sample Output

1122132431 101 1112131415

答案

# include

# include

# include

using namespace std;

int main(int argc,char* argv[]) {

ifstream cin ("aaa.txt");

string s,t;

int n;

cin>>n;

for (int i=0;i

{cin>>s;

int c=0;

t=s[0];

int temp=0;

for(int j=0;j

{

if(s[j]==t[0])

{

temp++;

if(j==s.size()-1)

{

printf("%d%c",temp,t[0]);

}

}

else

{

printf("%d%c",temp,t[0]);

t[0]=s[j];

temp=1;

if(j==s.size()-1)

{

printf("%d%c",temp,t[0]);

}

}

}

cout<

}

return 0;

}

八、Image Transformation

来源

(https://www.sodocs.net/doc/0a18942947.html,/onlinejudge/showProblem.do?problemCode=2857)

The image stored on a computer can be represented as a matrix of pixels. In the RGB (Red-Green-Blue) color system, a pixel can be described as a triplex integer numbers. That is, the color of a pixel is in the format "r g b" where r, g and b are integers ranging from 0 to 255(inclusive) which represent the Red, Green and Blue level of that pixel.

Sometimes however, we may need a gray picture instead of a colorful one. One of the simplest way to transform a RGB picture into gray: for each pixel, we set the Red, Green and Blue level to a same value which is usually the average of the Red, Green and Blue level of that pixel (that is (r + g + b)/3, here we assume that the sum of r, g and b is always dividable by 3).

You decide to write a program to test the effectiveness of this method.

Input

The input contains multiple test cases!

Each test case begins with two integer numbers N and M (1 <= N, M <= 100) meaning the height and width of the picture, then three N * M matrices follow; respectively represent the Red, Green and Blue level of each pixel.

A line with N = 0 and M = 0 signals the end of the input, which should not be proceed.

Output

For each test case, output "Case #:" first. "#" is the number of the case, which starts from 1. Then output a matrix of N * M integers which describe the gray levels of the pixels in the resultant grayed picture. There should be N lines with M integers separated by a comma.

Sample Input

2 2

1 4

6 9

2 5

7 10

3 6

8 11

2 3

0 1 2

3 4 2

0 1 2

3 4 3

0 1 2

3 4 4

0 0

Sample Output

Case 1: 2,5

7,10 Case 2: 0,1,2 3,4,3

答案

# include

# include

# include

using namespace std;

int main(int argc,char* argv[]) {

ifstream cin ("aaa.txt");

vectorr;

vectorg;

vectorb;

int n,m;

int rr,gg,bb;

int w=0;

while(cin>>n>>m)

{

r.clear();

g.clear();

b.clear();

w++;

if(n==n&&m==0)break;

C语言程序设计竞赛题及其答案

数学与统计学院 第三届计算机程序设计竞赛题 竞赛需知: 1、答案必须写在答题纸上。 2、程序采用C/JAVA/VB/VFP语言实现均可。 3、考虑到各种因素,程序的键盘输入和结果输出可以用伪代码或者自然语言表示。但是必 须说明输入变量和输出变量。 4、题目最好能用完整、正确的语言程序来解决问题,如确实无法编写完整语言程序的,可 以写出程序主要框架和流程,必要时可以用伪代码或者自然语言描述算法(程序)。 一、玫瑰花数(20分) 如果一个四位数等于它的每一位数的4次方之和,则称为玫瑰花数。例如: + + 1634+ =, 4^4 4^3 4^6 4^1 编程输出所有的玫瑰花数。 #include void main() { int i,j,k,l,m; for(i=999;i<=9999;i++) { j=i/1000; k=i%10; l=i/100-10*j; m=i/10-100*j-10*l; if(i==j*j*j*j+k*k*k*k+l*l*l*l+m*m*m*m) printf("%d\n",i); } } 二、菱形图案(20分) 对给定的奇数n,编程打印菱形图案。 输入样例: 7 输出样例: * *** ***** ******* ***** *** * #include #include void main() {

int i,j,k; int n; scanf("%d",&n); for(i=0;i #include void main() { int i,j,x,y; float r; int a,b,count=0; printf("请输入矩阵的行列i,j:"); scanf("%d%d",&i,&j); printf("请输入圆心的坐标点及半径x,y,r:"); scanf("%d%d%f",&x,&y,&r); for(a=0;a

程序设计比赛试题

程序设计比赛试题 最少钱币数: 【问题描述】 这是一个古老而又经典的问题。用给定的几种钱币凑成某个钱数,一般而言有多种方式。例如:给定了6种钱币面值为2、5、10、20、50、100,用来凑15元,可以用5个2元、1个5元,或者3个5元,或者1个5元、1个10元,等等。显然,最少需要2个钱币才能凑成15元。 你的任务就是,给定若干个互不相同的钱币面值,编程计算,最少需要多少个钱币才能凑成某个给出的钱数。 【要求】 【数据输入】输入可以有多个测试用例。每个测试用例的第一行是待凑的钱数值M (1<=M<=2000,整数),接着的一行中,第一个整数K(1<=K<=10)表示币种个数,随后是K个互不相同的钱币面值Ki(1<=Ki<=1000)。输入M=0时结束。 【数据输出】每个测试用例输出一行,即凑成钱数值M最少需要的钱币个数。如果凑钱失败,输出“Impossible”。你可以假设,每种待凑钱币的数量是无限多的。 【样例输入】 15 6 2 5 10 20 50 100 1 1 2 【样例输出】 2 Impossible

Feli的生日礼物 【问题描述】 Felicia的生日是11月1日(和Kitty是同一天生的哦)。于是Feli请来Kitty一起过生日。Kitty带来了最新款的“Kitty猫”玩具准备送给Feli,不过她说,这份礼物可不是白送的。Feli要帮她一个忙,才能够得到心仪已久的玩具。Kitty说,“Kitty猫”玩具已经卖出了n!个,n<=10^100*_*,Kitty想知道确切的数字,而不是无聊的“一个数加个感叹号”。Feli听了大吃一惊。要知道,算出n!是一个无比艰巨的任务。Feli告诉Kitty,就算Feli算出n!,Kitty也看不下去,因为当n=20时,计算机的长整型已经存不下了(Kitty只能接受1-9之间的数字)。于是Kitty说,你只要告诉我n!最后一位非0的数就可以了。Feli想了想,立刻动手写了个程序算出了正确的答案。现在,请你也试试看!注意哦,AC的男生将会得到一个“Hello Kitty”计算器(可编程,CPU 1THz,Mem 1TMB),AC的女生将会得到一个仿真“Hello Kitty”宠物(善解人意,无须喂养,智商1101,附带写情书功能)。 【要求】 【数据输入】每行一个n,直到输入数据结束 【数据输出】对应输入的n,每行输出一个答案 【样例输入】 1101 【样例输出】 8

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

一、鸡兔同笼 问题描述 一个笼子里面关了鸡和兔子(鸡有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.}

程序设计大赛试题及答案

试题 1、数学黑洞(程序文件名maths.c/maths.cpp) 【问题描述】 任给一个4位正整数,其各位数位上的数字不全相同,将数字重新组合成一个最大的数与最小的数相减,重复这个过程,最多7步,必得6174。对任给的4位正整数(各位数位上的数字不全相同),编程输出掉进黑洞的步数。 【输入】 一行,一个4位正整数n(1000< n<9999) 【输出】 掉进黑洞的步数 输入 1234 输出 3 2、进制转换(程序文件名conver.c/conver.cpp) 【问题描述】 任给一个十进制整数n,及正整数m(m<=16且m≠10), 将n转换成m进制并输出。 【输入】 一行,两个整数n,m(0 ≤ n ≤ 500000,2 ≤ m ≤ 16,且m≠10),中间用一个空格隔开,其中n 表示十进制数。 【输出】 转换后的数 【输入输出样例】 输入 255 8 输出 377 3、分数线划定(程序文件名score.c/score.cpp) 【问题描述】 公务员选拔工作正在 A 市如火如荼的进行。为了选拔优秀人才,A 市对所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试。面试分数线根据计划录取人数的150%划定,即如果计划录取m名公务员,则面试分数线为排名第m*150%(向下取整)名的选手的分数,而最终进入面试的选手为笔试成绩不低于面试分数线的所有选手。现在就请你编写程序划定面试分数线,并输出所有进入面试的选手的报名号和笔试成绩。 【输入】 第一行,两个整数n,m(5 ≤ n ≤ 5000,3 ≤ m ≤ n),中间用一个空格隔开,其中n 表示报名参加笔试的选手总数,m 表示计划录取的人数。输入数据保证m*150%向下取整后小于等于n。 第二行到第 n+1 行,每行包括两个整数,中间用一个空格隔开,分别是选手的报名号k(1000 ≤ k ≤ 9999)和该选手的笔试成绩s(1 ≤ s ≤ 100)。数据保证选手的报名号各不相同。 【输出】 第一行,有两个整数,用一个空格隔开,第一个整数表示面试分数线;第二个整数为进入面试的选手的实际人数。 从第二行开始,每行包含两个整数,中间用一个空格隔开,分别表示进入面试的选手的报名号和笔试成绩,按照笔试成绩从高到低输出,如果成绩相同,则按报名号由小到大的顺序输出。 【输入输出样例】 输入 6 3 1000 90 3239 88 2390 95 7231 84 1005 95 1001 88

C语言程序设计大赛题目

日本一位中学生发现一个奇妙的“定理”,请角谷教授证明,而教授无能为力,于是产生角谷猜想。猜想的内容是:任给一个自然数,若为偶数除以2,若为奇数则乘3加1,得到一个新的自然数后按照上面的法则继续演算,若干次后得到的结果必然为1。请编程验证。 *问题分析与算法设计 本题是一个沿未获得一般证明的猜想,但屡试不爽,可以用程序验证。 题目中给出的处理过程很清楚,算法不需特殊设计,可按照题目的叙述直接进行证。 *程序说明与注释 #include int main() { int n,count=0; printf("Please enter number:"); scanf("%d",&n); /*输入任一整数*/ do{ if(n%2) { n=n*3+1; /*若为奇数,n乘3加1*/ printf("[%d]:%d*3+1=%d\n",++count,(n-1)/3,n); } else { n/=2; /*若为偶数n除以2*/ printf("[%d]: %d/2=%d\n",++count,2*n,n); } }while(n!=1); /*n不等于1则继续以上过程*/ }

数论中著名的“四方定理”讲的是:所有自然数至多只要用四个数的平方和就可以表示。请编程证此定理。 *问题分析与算法设计 本题是一个定理,我们不去证明它而是编程序验证。 对四个变量采用试探的方法进行计算,满足要求时输出计算结果。 #include #include int main() { int number,i,j,k,l; printf("Please enter a number="); scanf("%d",&number); /*输入整数*/ for(i=1;i int main() { int a,b,c,d; printf("Please enter a number:"); scanf("%d",&a); /*输入整数*/ b=a*a*a; /*求整数的三次方*/ printf("%d*%d*%d=%d=",a,a,a,b); for(d=0,c=0;c

acm程序设计大赛题目

The Mailboxes Manufacturers Problem Time Limit:1000MS Memory Limit:65536K Total Submit:299 Accepted:227 Description In the good old days when Swedish children were still allowed to blowup their fingers with fire-crackers, gangs of excited kids would plague certain smaller cities during Easter time, with only one thing in mind: To blow things up. Small boxes were easy to blow up, and thus mailboxes became a popular target. Now, a small mailbox manufacturer is interested in how many fire-crackers his new mailbox prototype can withstand without exploding and has hired you to help him. He will provide you with k(1 ≤ k≤ 10) identical mailbox prototypes each fitting up to m(1 ≤ m≤ 100) crackers. However, he is not sure of how many firecrackers he needs to provide you with in order for you to be able to solve his problem, so he asks you. You think for a while and then say, “Well,if I blow up a mailbox I can’t use it again, so if you would provide me with only k = 1 mailboxes, I would have to start testing with 1 cracker, then 2 crackers, and so on until it finally exploded. In the worst case, that is if it does not blow up ev en when filled with m crackers, I would need 1 + 2 + 3 + … + m = m ×(m+ 1) ? 2 crackers. If m = 100 that would mean more than 5000 fire-crackers!” “That’s too many,” he replies. “What if I give you more than k = 1 mailboxes? Can you find a strategy that requires less crackers?” Can you? And what is the minimum number of crackers that you should ask him to provide you with? You may assume the following: 1.If a mailbox can withstand x fire-crackers, it can also withstand x? 1 fire-crackers. 2.Upon an explosion, a mailbox is either totally destroyed (blown up) or unharmed, which means that it can be reused in another test explosion.

C语言程序设计大赛题目

C语言程序设计大赛题 目 Company Document number:WTUT-WT88Y-W8BBGB-BWYTT-19998

1.角谷猜想 日本一位中学生发现一个奇妙的“定理”,请角谷教授证明,而教授无能为力,于是产生角谷猜想。猜想的内容是:任给一个自然数,若为偶数除以2,若为奇数则乘3加1,得到一个新的自然数后按照上面的法则继续演算,若干次后得到的结果必然为1。请编程验证。 *问题分析与算法设计 本题是一个沿未获得一般证明的猜想,但屡试不爽,可以用程序验证。 题目中给出的处理过程很清楚,算法不需特殊设计,可按照题目的叙述直接进行证。 *程序说明与注释 #include<> intmain() { intn,count=0; printf("Pleaseenternumber:"); scanf("%d",&n);/*输入任一整数*/ do{ if(n%2) { n=n*3+1;/*若为奇数,n乘3加1*/ printf("[%d]:%d*3+1=%d\n",++count,(n-1)/3,n); } else { n/=2;/*若为偶数n除以2*/ printf("[%d]:%d/2=%d\n",++count,2*n,n); } }while(n!=1);/*n不等于1则继续以上过程*/

}

2.四方定理 数论中着名的“四方定理”讲的是:所有自然数至多只要用四个数的平方和就可以表示。 请编程证此定理。 *问题分析与算法设计 本题是一个定理,我们不去证明它而是编程序验证。 对四个变量采用试探的方法进行计算,满足要求时输出计算结果。 #include<> #include<> intmain() { intnumber,i,j,k,l; printf("Pleaseenteranumber="); scanf("%d",&number);/*输入整数*/ for(i=1;i intmain() { inta,b,c,d; printf("Pleaseenteranumber:"); scanf("%d",&a);/*输入整数*/

C语言程序设计竞赛模拟试题

1、编写程序,从键盘上连续输入若干字符,直到回车换行符结束。统计并输出所输入的空 格、大写字母、小写字母,以及其他字符(不含回车换行符)的个数。 #include "" main() { char ch=' '; int i=0, j=0, k=0, m= ?1; do { if (ch>='a' && ch<='z') i++; else if (ch>='A' && ch<='Z') j++; else if (ch == ' ') m++; else k++; }while((ch=getchar())!='\n'); printf ("small letter = %d, capital letter = %d\n", i, j); printf ("space = %d, other = %d\n", m, k); } 2、编写程序,求100~999之间所有的水仙花数。所谓“水仙花数”,即是一个三位数, 它个位、十位、百位数字的立方和,恰好等于该数本身。 #include "" main() { int i, j = 1; int nf, ns, nt; for (i =100; i<=999; i++) { nf = i%10; ns = i/10%10; nt = i/100; nf = nf * nf * nf; ns = ns * ns * ns; nt = nt * nt * nt; if ((nf + ns + nt) == i) { printf ("The %d's number is %d\n", j, i); j++; } } 3、编写程序,求1-1/2+2/3-3/4+4/5-5/6+6/7….-99/100=

最新慈溪市小学生计算机程序设计竞赛复赛试题(定稿)

2012年慈溪市小学生计算机程序设计比赛 复赛试题 比赛时间:2012年12月23日上午8:30—10:30 题目概览 注意事项 1.每位选手都应先在E盘根目录下建立自己的答卷文件夹,该文件夹的名称为自己的考号;2.选手最终所提交的所有文件都必须存放在自己的考生文件夹中,凡错放及以书面形式提交的答卷一律视作无效; 3.每题提交的解答都必须包括以下二个文件,即源程序文件和经编译后生成的可执行文件,其名称必须与各题中所规定的相一致; 4.程序中必须采用文件读写的方法来实现数据的输入和结果的输出,即程序运行时所需输入数据应从题中指定的输入文件中读取(而不得采用键盘输入的方式),程序运行的结果应写入到题中指定的文件中(而不是输出到屏幕上)。 5.用于提供输入数据和记录输出结果的文件的名称都已在题中具体规定,选手程序在调用它们时不得为其指定任何特别的路径。 6.复赛用机房电脑C盘和D盘均已设置成开机还原保护,选手切勿把程序存放在C盘和D 盘中,否则如果重新开机后程序将不复存在。 7.比赛结束后请不要关机。

1.统计成绩(score.pas/exe) 【问题描述】 每次考试或测试后,老师们都要进行成绩统计。假如某次期末考试有语文、数学、英语三门课,现请你编程输出总成绩最高分以及每门学科的最高分。 【输入数据】 输入文件score.in:输入从文件中读取,输入共n+1行。 第1行是一个正整数n(1≤n≤100),表示学生人数,从1到n编号。 接下来n行,每行3个整数,依次表示每个学生的语文、数学、英语成绩(每门课成绩是0到100之间的整数,包括0和100)。 【输出数据】 输出文件score.out:结果输出到文件中,输出共1行,包含4个整数,分别表示三门课总成绩最高分,语文学科的最高分,数学学科的最高分,英语学科的最高分。 【输入输出样例】 【样例解释】 输入3个学生成绩,第1个学生语文、数学、英语三门课的成绩分别为80,67,96,第2个学生语文、数学、英语三门课的成绩分别为88,71,93,第3个学生语文、数学、英语三门课的成绩分别为90,95,80。第3个学生的总成绩最高,为265。语文学科的最高分是90分,数学学科的最高分95,英语学科的最高分96。 【数据范围约定】 所有的输入数据保证1≤n≤100,成绩在0到100分之间(包括0和100)。 2.最小的Y(miny.pas/exe) 【问题描述】 程序设计与数学密切相关,所以兴趣小组的辅导老师经常拿一些有趣的数学题来让大家思考。一次课上,辅导老师又拿出了一个有趣的数学问题,题目是这样的:给你两个正整数x和z,求最小的整数y,使得x×y以后再除以z的余数为0。 比如x=3,z=6,求最小的y。 题目一出,马上有同学说:最小的y是0。 老师说:是的,非常厉害,最小的y是0。那最小的正整数y是多少呢? 【输入数据】 输入文件miny.in:输入从文件中读取,输入共1行,两个正整数,分别表示x和z (1≤x≤2147483647, 1≤z≤2147483647)。 【输出数据】 输出文件miny.out:结果输出到文件中,输出共1行,表示使得x×y以后再除以z的

第三届Java程序设计大赛题目

第三届Java程序设计大赛题目 重要提示: 1.除下载竞赛题目和上交代码,其余时间不允许连接网络,否则取消竞赛资格! 2.创建以“学号-姓名”命名的根文件夹(形式 如:“10317210135-张三”),并将竞赛结果代码严格按题目上的命名要求进行命名并直接保存在该文件夹下; 3.在两个小时之内完成源代码,源代码上交前要将前面创建的文件夹(如前面创建的“10317210135-张三”文件夹)压缩成“rar”格式,命名形如:“10317210135-张三.rar”; 3. 将压缩的源代码上交到上传 至“ftp://100.1.0.38/”,用户名:student10,密 码:student10; 4.源代码上交期限是4月27日21:00前,否则不予接收。 注意:凡违反上述规定的考生,其成绩一律按零分处理!

1. 竞赛第一题 有5个学生,他们的姓名分别为丁一,刘二,张三,李四,王五,他们的英语成绩分别为62,46,91,73,29;数学成绩分别为 64,97,81,75,90,物理成绩分别为94,27,65,51,88,编写一个Java程序,找出他们当中总分最高的学生,并输出他的姓名和分数。(提示:为每一个学生创建一个Student类,并将他们的姓名,各科成绩作为属性存储起来,然后建个Student类型的数组通过比较找出符合要求的人)。 要求: Java源文件包含main()方法,运行能输出结果,将制作好的应用程序类保存为“T1.java”,放在根文件夹下。 2. 竞赛第二题 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?(本题20分) 要求: Java源文件包含main()方法,运行能输出结果,将制作好的应用程序类保存为“T2.java”,放在根文件夹下。

第十四届云飞杯Scratch编程比赛试卷

长兴县第十四届云飞杯SCRATCH作品比赛试卷 制作时间:三小时考号:机号: 一、试题 (一)基础部分(30分,1-2题10分,3-4题20分) 1. 小猫踩球,要求小猫和球都能随光标键移动,球要会转。 2. 按空格键,猫说跳,狗就跳一下。 3. 做一本电子相册,要求可以前后翻,翻页的过程中有特效。。 4.编程计算的值。 (二)创作部分(80分。第5题与第6题二选一,30分。第7题与第八题二选一,40分。)如果时间有余的选手可以完成其它主题,酌情加分。 5. 展示类 聪明的猫:根据题意完成作品。 如图背景所示,老鼠在坐标(-200,-100),猫在坐标(200,-150)位置。点绿旗后,小猫必须先跑到河边喝水,停止2秒钟。然后去抓老鼠,要求在这过程中猫能跑出最短路程的线路,并画出小猫抓老鼠的路线。吃掉老鼠后,老鼠消失,猫变大,并发出叫声。 6. 画画类 点绿旗能一笔画出下图,最大正方形的边长200像素。 200 7.计算类 一场球赛开始前,售票工作正在紧张的进行中.每张球票为50元,现有10个人排队等待购票,其中有些人手持50元的钞票,另外一些人手持100元的钞票.假设开始售票时售票处没有零钱,,请编程实现判断该队伍是否会出现找不出钱的情况?(说明:如果这10个人手持的币值是(50,50,100,50,100,50,100,100,50,100),则能找出钱;如果手持的币值是(50,50,100,50,100,100,100,50,50,50),则不能找出钱。) 要求:(1)队伍中手持的50元还是100元,由电脑随机产生,并逐一写入链表中。 (2)电脑能自动判断队伍是否会出现找不出钱的情况。 (3)如果能找出钱电脑说:“运气不错,能找出钱”,否则另外说一句话。 8. 互动类 编游戏:石头,剪子,布。 游戏说明: 根据提供的素材做一个人机对战“石头,剪子,布”的传统游戏。(即石头碰剪子,石

首届程序设计大赛题目及答案

首届程序设计大赛题目及答案 程序设计大赛题目 1. 硬币兑换:用一元人民币兑换一分、二分和五分的硬币,编程求出所有兑换方法,并打印每种情况下各面值硬币需几枚?(10分) 2. 旅馆里有一百个房间,从1到100编了号。第一个服务员把所有的房间门都打开了,第二个服务员把所有编号是2的倍数的房间“相反处理”,第三个服务员把所有编号是3的倍数的房间作“相反处理”,……,以后每个服务员都是如此。问第100个服务员来过后,哪几扇门是打开的。(所谓“相反处理”是:原来开着的门关上,原来关上的门打开。) (15分) 3. 整型数组,长度为10,输入数组各元后,求数组各元的平均值,并找出最接近平均值的那个元素。打印输出上述两个结果,用逗号隔开,不要有其它字符。(20分) 4. 编程求两个很长的整数之和,比如两个20位十进制整数。(很长的整数指无法用long型存储的数)(25分) 例如: 12345678900987654321+12345678900987654321=24691357801975308642 5.编写布雷程序。(30分) 在一个10*10的方格中,随机分布10个地雷,并在其它没有地雷的格中显示该方格周围相邻的方格中共有几枚地雷。 样例输出:(图中-1的位置表示地雷,其它值表示该位置相邻的八个格子中的地雷数) 答案: 第一题: #include using namespace std; int main() { int i,j,k; for(i=1;i<=20;i++) for(j=1;j<=50;j++) {

k=100-5*i-2*j; if(k>0) cout<<"五分硬币"< using namespace std; int main() { int i,j; //i为服务员编号,j为房间编号 int a[101]; for(int t=1;t<101;t++) a[t]=1; for(i=2;i<101;i++) for(j=i;j<101;j++) if(j%i==0) a[j]*=-1; cout<<"打开的房间为:"; for(i=1;i<101;i++) if(a==1) cout< #include using namespace std; int main() { int a[10],i,sum=0,n=0; float ave,ca; for(i=0;i<10;i++) { cin>>a; sum+=a; } ave=sum/10.0; cout<<"数组平均值为:"<

编程比赛题目及规则3

第三届“C语言程序设计”编程比赛题目及规则 比赛目的:为了提高广大学生编程兴趣,提高学生动手编程实践能力,在我系形成良好的学习氛围。 参赛对象:电气信息III106班、管科类103班 比赛时间:6月5日9:00-24:00 参赛方式:参赛学生在所限定时间内完成特定的题目,为了评选方便,程序开发的环境暂定为:visual c++ ,Dev C++ ,Code:Blocks,Turbo C 注意事项: 1、学生在完成题目后,请将源程序、运行效果截图、必要的说明文档打包,递交到网络平台上(递交方式与以往作业相同)。源程序请以题目序号命名,如(file1.c),要求变量名见名知意,有适当的注释、空行和良好的缩进格式;说明文档目的主要是为了教师了解学生开发情况,内容主要是对较复杂题目的主要设计思想进行一定的说明,如程序结构说明、重要数据的说明、程序函数清单等,文件格式可以存成(.doc或.txt文件),此次比赛不需要画流程图。 /*每个函数的书写格式请参照为: 函数名: 函数功能: 参数说明: 算法描述: */ 2、参赛学生可以根据个人情况任意选择答题顺序。将依据评分办法来确定参赛者的获奖名 次。 评分办法: 1、参赛学生需在个人机器上独立编程,每道题目需上机调试通过。作品需兼顾程序可读性、 界面友好型、容错性等。遵循规范实用、稳定可靠、算法优良的原则。 2、参赛题目共3题,总分100分。从易到难分别为(50分、30分、20分)。 3、将从中选出一等奖1名,二等奖2名,鼓励奖若干名。 4、参赛题目见下页!!!!

参赛题目 1、(50分)网络新手的原型是一个名为BIFF的人,他有一种独特的编写消息的方法.下面是一条常见的BIFF公告: 样式输入: Enter message: Hey dude, C is rilly cool 样式输出:In Biff-speak: H3Y DUD3, C IS R1LLY COOL!!!!!!!!!! 程序需要把消息转换成大写字母,用数字代替特定的字母(a→4,b→8,e→3,i→1,O→0,s→5),然后添加10个左右的感叹号. 2、(30分)编程测试任意输入两个英文单词是否为变位词(相同字母的重新排列): 样式输入:Enter first word:smartest Enter second word: mattress 样式输出:The words are anagrams. 若输入:Enter first word:dumbest Enter second word: stumble The words are not anagrams. 4、(20分)编写程序,生成一种贯穿10*10字符数组(初始时全为字符’.’)的“随机步法”。程序必须随机地从一个元素“走到”另一个元素。每次都向上、向下、向左、向右移动一个元素位置。已访问过的元素按访问顺序用字母A到Z进行标记。下面是一个输出示例: 提示:利用srand函数和4的余数。余数一共有4中可能的值(0、1、2和3),指示下一次移动的4种可能方向。在执行移动之前,需要检查两项内容:一是不能走到数组外面,而是不能走到已有字母标记的位置。只要有一个条件不满足,就得尝试换一个方向移动。如果四个方向都堵住了,程序就必须终止了。下面是提前结束的一个示例,Z了。

2010程序设计大赛决赛题及参考答案

海南软件职业技术学院第四届计算机文化节 程序设计大赛决赛题 提醒:请各队在各自电脑D盘根目录下创建一个命名为“2010程序设计大赛-队名”的文件夹,将所有题目的答案都放到此目录底下。 做题过程中请注意保存。每做完一题就通过电子教室系统提交一次,电脑上没装电子教室软件的每题做完后举手示意工作人员用U盘提交。 各题源文件都分别保存在一个单独的文件夹中,文件夹命名为:题号_队名。 第一部分(简单题型): 1、(10分)马克思手稿中有一道趣味数学问题:有30个人,其中有男人、女人和小孩, 在一家饭馆吃饭花了50先令;每个男人花3先令,每个女人花2先令,每个小孩花1先令;问男人、女人和小孩各有几人?输出所有可能的组合。 样例输出: Men Women Children 1: 0 20 10 2: 1 18 11 3: 2 16 12 4: 3 14 13 5: 4 12 14 6: 5 10 15 7: 6 8 16 8: 7 6 17 9: 8 4 18 10: 9 2 19 11: 10 0 20 Java参考答案: void main() { int men,women,children; int count=0; printf(" %10s%10s%10s\n”,”men”,”women”,”children"); for(men=0;men<=16;men++) for(women=0;women<=25;women++) for(children=0;children<=30;children++) if(men+women+children==30&&men*3+women*2+children==50) { count++; printf(“%2d%10d%10d%10d\n”,count,men,women,children); } }

logo程序设计竞赛题及答案

一、画图形。(20分) 图一图二 1、(10分)写出画图一的命令 答案:repeat 8[fd 50 rt 360*3/8 fd 50 lt 360*3/8-360/8] 2、(10分)写出画图二的命令 答案:repeat 8[repeat 3[fd 50 rt 120]rt 360/8] 考查知识:重复命令的掌握。 考察技能:使用重复命令画出重复的规则图形。 评分标准:没有使用重复命令画图形的扣5分,只有使用难搞重复命令画出全部图形的才给10分。 二、(15分)编写一个带三个变量的过程dbx :n :k :bc,使过程能画出一个由n个边长为bc 的正k变形旋转而成的图形。例如,调用一下过程能画出相对应的图形: Dbx 6 6 50Dbx 5 5 50Dbx 10 4 50 答案: to dbx :n :k :bc repeat :n[repeat :k[fd :bc rt 360/:k]rt 360/:n] end 考查知识:带变量的过程的使用 考察技能:能灵活运用带变量的过程画出不同的图形 三、(15分)编写一个计算一位小数加减乘除的人机交互过程main,当过程运行时,屏幕上会出现一道一位小数的计算题,在你输入这道题的答案后,屏幕会提示你这道题目你是做对了还是做错了。 参考答案: TO JF MAKE "A (RANDOM 100) * MAKE "B (RANDOM 100) * (PR :A [+] :B [的和是多少]) MAKE "C READ

IF :C = :A + :B THEN PR [你答对了!] STOP PR [你答错了!] STOP END TO JIF MAKE "A (RANDOM 100) * MAKE "B (RANDOM 100) * IF :A < :B THEN MAKE "D :A MAKE "A :B MAKE "B :D (PR :A [-] :B [的差是多少]) MAKE "C READ IF :C = :A - :B THEN PR [你答对了!] STOP PR [你答错了!] STOP END TO CF MAKE "A (RANDOM 100) * MAKE "B (RANDOM 100) * (PR :A [×] :B [的积是多少]) MAKE "C READ IF :C = :A * :B THEN PR [你答对了!] STOP PR [你答错了!] STOP END TO CHF MAKE "A (RANDOM 100) * MAKE "B (RANDOM 100) * MAKE "C :A * :B (PR :C [÷] :B [的商是多少]) MAKE "A READ IF :C = :A * :B THEN PR [你答对了!] STOP PR [你答错了!] STOP END TO MAIN MAKE "K RANDOM 4 IF :K = 1 THEN JF IF :K = 2 THEN JIF IF :K = 3 THEN CF IF :K = 4 THEN CHF MAIN END 考查知识:随机数的灵活使用,尾递归的使用 考察技能:能灵活运用随机数产生随机小数,能进行数理分析。评分标准:能做出加减乘除法各给3分,总过程给3分。 四、(15分)编写过程画如下图形:

(完整版)第十三届Scratch编程比赛试卷

第十三届Scratch编程比赛试卷 SCRATCH作品比赛试卷 制作时间:三小时考号:_________ 机号:__________ 一、试题 (一)基础部分(20分) 1.做一只笔,红黄蓝三种颜色块,点哪个色块,笔就变为哪种颜色,并能画出红的圆,黄的三角形,蓝色的正五角星。。 2.出两位随机数的乘法题,并能让计算机判断对错.。 3.天上不停掉炸弹,屏幕炸弹数超过二个,小猫能自动躲开。 4.做一辆小车,能沿一条赛道开动。 (二)创作部分(80分。第5题与第6题二选一,30分。第7题与第八题二选一, 50分。) 如果时间有余的选手可以完成其它主题,酌情加分。 5.展示类 小猫跟随鼠标移动路线运动,按S键开始记录小猫移动路线,按E键停业记录, 按playback 按钮能重复播放小猫的运动轨迹。 6.展示类 做一个20分钟倒计时,指针经过扇区用颜色显示,20分钟到了,显示时间到。 如图所示 7.计算类 完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。 如果一个数恰好等于它的因子之和,则称该数为完全数” 例如:第一个完全数是6,它有约数1、2、3、6,除去它本身6外,其余3个数相加,1+2+3=6 编程求10到1000之间所有的完全数。 8.互动类 编游戏:贪玩的蝴蝶一不小心闯入了蝙蝠的私人领地,遭到蝙蝠的追赶。 游戏说明: 蝙蝠追着蝴蝶跑。 蝴蝶每被抓到1次,蝴蝶的生命值减1。 蝴蝶躲过蝙蝠5秒,蝴蝶的生命值恢复0.5。 蝴蝶每2秒可释放1处陷阱; 蝙蝠碰到陷阱,生命值减1,生命值用完后结束游戏,蝴蝶胜。 蝴蝶被蝙蝠抓到10次,游戏结束,蝙蝠胜。

历届百度之星程序设计大赛题目

2005年百度之星程序设计大赛试题初赛题目 第一题(共四题 100 分):连续正整数( 10 分) 题目描述:一个正整数有可能可以被表示为 n(n>=2) 个连续正整数之和,如: 15=1+2+3+4+5 15=4+5+6 15=7+8 请编写程序,根据输入的任何一个正整数,找出符合这种要求的所有连续正整数序列。 输入数据:一个正整数,以命令行参数的形式提供给程序。 输出数据:在标准输出上打印出符合题目描述的全部正整数序列,每行一个序列,每个序列都从该序列的最小正整数开始、以从小到大的顺序打印。如果结果有多个序列,按各序列的最小正整数的大小从小到大打印各序列。此外,序列不允许重复,序列内的整数用一个空格分隔。如果没有符合要求的序列,输出“NONE” 。 例如,对于 15 ,其输出结果是: 1 2 3 4 5 4 5 6 7 8

对于 16 ,其输出结果是: NONE 评分标准:程序输出结果是否正确。 百度之星程序设计大赛试题 -2 第二题(共四题 100 分):重叠区间大小( 20 分) 题目描述:请编写程序,找出下面“ 输入数据及格式” 中所描述的输入数据文件中最大重叠区间的大小。 对一个正整数 n ,如果 n 在数据文件中某行的两个正整数(假设为A 和 B )之间,即 A<=n<=B 或 A>=n>=B ,则 n 属于该行;如果 n 同时属于行 i 和 j ,则 i 和 j 有重叠区间;重叠区间的大小是同时属于行 i 和 j 的整数个数。 例如,行( 10 20 )和( 12 25 )的重叠区间为 [12 20] ,其大小为 9 ;行( 20 10 )和( 12 18 )的重叠区间为 [10 12] ,其大小为 3 ;行 (20 10) 和( 20 30 )的重叠区间大小为 1 。 输入数据:程序读入已被命名为 input.txt 的输入数据文本文件,该文件的行数在 1 到 1,000,000 之间,每行有用一个空格分隔的 2 个正整数,这 2 个正整数的大小次序随机,每个数都在 1 和 2^32-1 之间。(为便于调试,您可下载测试 input.txt 文件,实际运行时我们会使用不同内容的输入文件。)

相关主题