c语言程序设计竞赛题及其答案
数学与统计学院
第三届计算机程序设计竞赛题
竞赛需知:
答案必须写在答题纸上。
程序采用C/JAVA /VB/VFP语言实现均可。
考虑到各种因素,程序的键盘输入和结果输出可以用伪代码或者自然语言表示。但是必须说明输入变量和输出变量。
题目最好能用完整、正确的语言程序来解决问题,如确实无法编写完整语言程序的,可以写出程序主要框架和流程,必要时可以用伪代码或者自然语言描述算法(程序)。
一、玫瑰花数(20分)
如果一个四位数等于它的每一位数的4次方之和,则称为玫瑰花数。例如:
,
编程输出所有的玫瑰花数。
#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
{for(j=0;j
printf(" ");
for(k=0;k
printf("*");
printf("\n");
}
}
三、钻石奖励(20分)
海盗们决定用“投环套物”的方式来奖励最近一次行动中贡献最大的人。他们将1克拉钻石排列成矩阵,通过投掷圆环决定奖励的钻石的数量。假设每个钻石的x和y坐标都是1到99的整数,输入矩阵及圆形,请你帮他们判断一下这个人能获得多少克拉的钻石。
****
****
****
****
输入格式
输入数据包含行,
输出格式
输出数据
4 4
2 1 1
输出样例
5
#include
#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
for(b=0;b
if(sqrt((a-x)*(a-x)+(b-y)*(b-y))<=r)
count++;
printf("钻石个数:%d",count);
}
四、连续正整数(20分)
一个正整数有可能可以被表示为 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
#include
void main()
{
int i,j,h,k,n;
n=1;k=0;
scanf("%d",i);
for(j=1;j<=i/2+1;j++)
{
k=k+j;
if(k==i)
{for(h=n;h<=i/2+1;h++)
printf("%d "h);
printf("\n");n++;}
j++;
}
}
五、(密钥短语密码)(20分)
让我们选一个英文短语, 称其为密钥字(key word)或密钥短语(key phrase),如HAPPY NEWYEAR, 按顺序去掉重复字母和空格得HAPYNEWR。将它依次写在明文字母表之下, 而后再将明文字母表中未在短语中出现过的字母依次写在此短语之后, 就可构造出一个代替表, 如下所示:
明文:ABCDEFGHIJKLMNOPQRS