2018第一届东电智能科技竞赛:初赛—C语言程序编辑题

2019-04-13 16:29发布

大多是水题,四套卷子共12题,这里列出11道,有道是重复的。1.一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问在100000内有哪些满足要求?#include #include int iswanquan(int num); int main(int argc,char* argv[]) { int i; for(i=1;i<=100000;i++) { if(iswanquan(i+100)&&iswanquan(i+268)) { printf("%d ",i); } } return 0; } int iswanquan(int num) { double ind=sqrt((double)num); if(ind-(double)(int)ind) return 0; else return 1; }2.输入某年某月某日,判断这一天是这一年的第几天?#include int isrun(int year); int main(int argc,char* argv[]) { int year,month,day; printf("年>> "); scanf("%d",&year); printf("月>> "); scanf("%d",&month); printf("日>> "); scanf("%d",&day); int monthx[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; if(isrun(year)) monthx[2]=29; if(month<1||month>12) printf("ERROR MONTH "); else if(day<1||day>monthx[month]) printf("ERROR DAY "); else { int sum=day,i; for(i=1;i3.输出国际象棋棋盘??!这什么鬼,应该是一白一黑,奇偶行交错吧。用O表示白,X表示黑。#include int main(int argc,char* argv[]) { int i,j; for(i=1;i<=8;i++) for(j=1;j<=8;j++) { if(i%2&&j%2||i%2==0&&j%2==0) putchar('O'); else putchar('X'); if(j==8) putchar(' '); } printf(" O---White,X---Black "); return 0; }4.判断101-200之间有几个素数,并输出所有素数。#include #include int isprime(int num); int main(int argc,char* argv[]) { int i,num; for(i=101,num=0;i<=200;i++) { if(isprime(i)) { printf("%d ",i); num++; } } printf(" TOTAL: %d ",num); return 0; } int isprime(int num) { int ind; for(ind=2;ind<=(int)sqrt((double)num);ind++) { if(!(num%ind)) return 0; } return 1; }5.将一个正整数分解质因数,如:输入90,输出90=2*3*3*5。#include #include int isprime(int num); int main(int argc,char* argv[]) { int num; scanf("%d",&num); if(num<1) { printf("ERROR "); return 0; } if(isprime(num)) { printf("%d = %d ",num,num); return 0; } int i; printf("%d = ",num); for(i=2;i<=num;i++) { if(isprime(i)) { while(num%i==0) { printf("%d",i); num/=i; if(num!=1) putchar('*'); else putchar(' '); } } } return 0; } int isprime(int num) { int ind; for(ind=2;ind<=(int)sqrt((double)num);ind++) { if(!(num%ind)) return 0; } return 1; }
6.求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字,例如输入a=2,n=5时,s=2+22+222+2222+22222。#include int main(int argc,char* argv[]) { int a,n,sum; printf("a? >>"); scanf("%d",&a); printf("count? >>"); scanf("%d",&n); printf("s = "); int i,t=a; for(i=1,sum=0;i<=n;i++) { printf("%d%c",a,i==n?' ':'+'); sum+=a; a=a*10+t; } printf("s = %d ",sum); return 0; }7.输入两个正整数m和n,求最大公因数和最小公倍数。#include int gcd(int m,int n); int main(int argc,char* argv[]) { int m,n; scanf("%d%d",&m,&n); printf("GCD = %d LCM = %d ",gcd(m,n),m*n/gcd(m,n)); return 0; } int gcd(int m,int n) { return n?gcd(n,m%n):m; }8.求1000以内的所有完全数。#include int main(int argc,char* argv[]) { int i,j,s; for(i=1;i<=1000;i++) { for(j=1,s=0;j9.输入3个数a、b、c,按大小顺序输出(这道题重复一次……)#include void swab(int* a,int* b); int main(int argc,char* argv[]) { int x,y,z; scanf("%d%d%d",&x,&y,&z); if(x>y) swab(&x,&y); if(x>z) swab(&x,&z); if(y>z) swab(&y,&z); printf("Large-Small>>%d %d %d ",z,y,x); printf("Small-Large>>%d %d %d ",x,y,z); return 0; } void swab(int* a,int* b) { int x=*a; *a=*b; *b=x; }10.有n个正整数,使其前面各数向后移动m个位置,最后m个数变成最前面的m个数。题意说的不是很清楚,意思应该是输入n个数后,把它们向后移动m个位置,后面移出去的从前面移进来。也就是需要来实现循环右移。需要注意的一点是,m可能大于n,所以需要处理m在0-n之间后再输出。#include int array[1000]; int main(void) { int n,m; printf("Count? >>"); scanf("%d",&n); printf("Please input %d number >> ",n); int i; for(i=1;i<=n;i++) scanf("%d",&array[i]); printf("m? >>"); scanf("%d",&m); for(;m>n;m-=n); m=n-m+1; for(i=1;i<=n;i++) { printf("%d ",array[m]); if(++m>n) m=1; } return 0; }11.有n个人围成一圈,顺序排号。从第一个人开始报数(1-3报数),凡是报到3的人退出圈子,问最后留下的是原来的第几号位。分析一下,用数组先表示这n个人是否还在圈子之中,全部初始化为1。从头开始不断扫数组,每移过两个还在圈子里的人,就把第三个在圈子里的人移出圈子,不断遍历直至有n个人被移出了圈子,最后那个被移出去的就是最后留下的。输出他的数组标号就是了。#include int array[1000]; int main(void) { int i,n,m; printf("n? >>"); scanf("%d",&n); for(i=1;i<=n;i++) array[i]=1; i=0,m=0; while(1) { int count=3; while(count--) { for(i++;!array[i];i++) { if(i>n) i=0; } if(i>n) i=1; } array[i]=0; m++; if(m==n) { printf("%d ",i); break; } } return 0; }嘿嘿,谁知道这比赛明年还有没有呢,希望对网上意外发现的你有帮助。