孝感学院程序设计大赛题目
都考了这么长时间了,还没有公布成绩。现在将题目发出来,高手帮助解答一下,我看看我对了几个共五大题,每大题五个空
第一题; 输入一本书的页数(假设在30000以内),统计在所有的页码中需要用0,1,2,3,....9这些数字各多少个。
程序代码:
#include<stdio.h> void main() { int digit[10]={___1____}; int i,page,bit; scanf("%d",&page); for(i=1;i<=page;i++) {____2_____; while (bit) {digit[___3___]++; bit=___4__;} } for(i=0;i<10;i++) printf("%d共用%d个\n",i,_____5____); }
第二题:检查一个身份证号是否合法:
公民身份号码是由17位数字码和1位校验码组成。排列顺序从左至右分别为:6位地址码,8位出生日期码,3位顺序码和1位校验码。
身份证是否合法是由前17位经过计算生成最后一位校验码,身份证最后一位校验码算法如下:
1. 将身份证号码前17位数分别乘以不同的系数,从第1位到第17位的系数分别为:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
2. 将得到的17个乘积相加。
3. 将相加后的和除以11并得到余数。
4. 余数可能为0 1 2 3 4 5 6 7 8 9 10这些个数字,其对应的身份证最后一位校验码为1 0 X 9 8 7 6 5 4 3 2。
程序输入一个身份证号,并用自己的身份证号验证程序。
(若不记得自己的身份证号,用这组数据验证:422201196303255057是正确的身份证,输错其中任意至少一位都是错语的身份证号)
程序代码:
#include<stdio.h> int base[]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}; char checkbit[]={'1','0','X','9','8','7','6','5','4','3','2'}; void main() { char ID[19]; int i,____1______; scanf("%s",ID); for(i=0;i<17;i++) sum+=(____2_____)*___3____; if (___4___==checkbit[___5___]) printf("%s身份证号正确。",ID); else printf("%s不是合法的身份证号。",ID); }
第三题: 杨辉三角是形如如下所式的数值三角形:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
..........................
程序输出N层的杨辉三角形。
程序代码:
#include<stdio.h> #define N 9 void print(int *a, int n) {int i; for(i=0;i<=40-n*3;i++) printf(" "); for(i=1;i<=n;i++) printf("%4d ",a[i]); printf("\n"); } void yanghui(____1____) { int i,j,pre,last; for (i=1;i<=n;i++) { pre=___2___; for (j=1;j<=i;j++) { last=a[j]; a[j]=_____3____; ___4_____; } print(____5___); } } void main() { int array[20]={0,1}; yanghui(array,N); }
第四题: 给定一棵树tree,其中结点定义如下:
struct {char name; //结点名
int lchild,rchild;
/*结点左右指针,若为0表示无左/右结点,不为0表示有 左/右结点,且该值表示该点到左/右结点的权值
*/
}
树的根结点名是'A',程序输出从根到每片页子所经过路径上权值之和。
程序代码:
#include<stdio.h> struct {char name; int lchild,rchild;} tree[]={{'\0',0,0},{'A',9,6},{'B',4,3},{'C',2,7},{'D',0,9},{'E',0,8}, {'G',0,0},{'H',0,0},{'\0',0,0},{'F',0,0},{'\0',0,0},{'I',0,0}}; void walkTree(int point, int length) { int thisLength=length; if (tree[point].lchild==0 && tree[point].rchild==0) {printf("A---%c:%d\n",tree[point].name,length); } else {if (tree[point].lchild!=0) {thisLength=____1_____;//һ walkTree(____2______,thisLength); } if (tree[point].rchild!=0) {thisLength=________3________; walkTree(_____4_____,thisLength); } } } void main() { walkTree(____5____); }
第五题: 2011年5月1日,我红客联盟截获从巴基斯坦发往美国白宫的一段断断续续的神秘的电文,经分析,它是由一段英文句子,将其中每个字母在ASCII表中转为其后的第五个字母,再将其第2-3两位求反,如下图:
X X X X X X X X
第 8 7 6 5 4 3 2 1 位
并将转换后的字母编码以三位十进制方式构成电文,每个十进制数首数若首数为0则以空格表示,请破译此电文,输出译文的内容。
程序代码:
#include<stdio.h> #include<stdlib.h> char enc[]=" 82126 96116 96 35 97104117 35 87 96111108117 35104126 35111108 96111 53"; char denc[100]={0}; void main() { char temp[4]={0}; int i,j=0,k; for(i=0;enc[i];__1____) {_________________2______________________; k=atoi(temp); //将字符串temp转换为它所对应的十进制整数 denc[__3___]=(char)k;} for(i=0;i<j;i++) denc[i]=____4_____; for(i=0;i<j;i++) denc[i]=____5_____; printf("%s\n",denc); }