CCF历年真题C语言答案解析.docx
- 文档编号:25811038
- 上传时间:2023-06-15
- 格式:DOCX
- 页数:36
- 大小:19.86KB
CCF历年真题C语言答案解析.docx
《CCF历年真题C语言答案解析.docx》由会员分享,可在线阅读,更多相关《CCF历年真题C语言答案解析.docx(36页珍藏版)》请在冰豆网上搜索。
CCF历年真题C语言答案解析
题1:
出现次数最多的数
#include
intmain()
{
inti,j,n,s;
intt=1;
inta[10001]={0};
scanf("%d",&n);
for(i=0;i { scanf("%d",&s);//下标为输入值,每个数组值为输入频数 a[s]++; if(a[s]>a[t])t=s; if(a[s]==a[t])t=(s s: t); } printf("%d",t); return0; } 题2: ISBN号码 #include intmain() { intsum=0; chara[13]={'\0'}; gets(a); sum=(a[0]-'0')*1+(a[2]-'0')*2+(a[3]-'0')*3+(a[4]-'0')*4+(a[6]-'0')*5+(a[7]-'0')*6+(a[8]-'0')*7+(a[9]-'0')*8+ (a[10]-'0')*9; if((sum%11==a[12]-'0')||(sum%11==10&&a[12]=='X'))//注意正确情况几种类型 { printf("Right"); } else { if(sum%11==10) a[12]='X'; else a[12]=sum%11+'0'; puts(a); } return0; } 题3: 相反数 #include intmain() { inti,j,n,t=0; inta[501]; scanf("%d",&n); for(i=0;i { scanf("%d",&a[i]); } for(i=0;i { for(j=i+1;j { if(a[i]+a[j]==0)t++; } } printf("%d",t); return0; } 题4: 窗口 #include typedefstructwindow1{ intx1,x2,y1,y2,order; }window; voidInputwindow(windowws[],intn) { inti; for(i=1;i<=n;i++) { scanf("%d%d%d%d",&ws[n-i].x1,&ws[n-i].y1,&ws[n-i].x2,&ws[n-i].y2); ws[n-i].order=i; } } intgetpos(windowws[],intn,intx,inty) { inti; for(i=0;i { if(x>=ws[i].x1&&x<=ws[i].x2&&y>=ws[i].y1&&y<=ws[i].y2) { returni; } } return-1; } voidmovewindow(windowws[],intn,intpos) { windoww=ws[pos]; inti; for(i=pos-1;i>=0;i--) { ws[i+1]=ws[i]; } ws[0]=w; } intmain() { inti,n,m,x,y,pos; scanf("%d%d",&n,&m); windowws[n]; Inputwindow(ws,n); for(i=0;i { scanf("%d%d",&x,&y); pos=getpos(ws,n,x,y); if(pos==-1){ printf("IGNORED\n"); } else{ printf("%d\n",ws[pos].order); movewindow(ws,n,pos); } } return0; } 题5: 相邻数对 #include #include intmain() { inti,j,n,t=0; inta[1001]; scanf("%d",&n); for(i=0;i { scanf("%d",&a[i]); } for(i=0;i { for(j=i+1;j { if(abs(a[i]-a[j])==1)t++; } } printf("%d",t); return0; } 题6: 画图 #include intmain() { inti,j,n,k,t=0; inta[101][4]; scanf("%d",&n); for(i=0;i { scanf("%d%d%d%d",&a[i][0],&a[i][1],&a[i][2],&a[i][3]); } for(i=0;i<101;i++) { for(j=0;j<101;j++) { for(k=0;k { if(j>=a[k][0]&&j=a[k][1]&&i break; } if(k t++; } } printf("%d",t); return0; } 题7: 门禁系统 #include intmain() { inti,n,s=0; inta[1001]={0}; scanf("%d",&n); for(i=0;i { scanf("%d",&s); a[s]++; printf("%d",a[s]); } return0; } 题8: z字形扫描 #include intmain() { inti,j,k,n; inta[500][500]; scanf("%d",&n); for(i=0;i { for(j=0;j { scanf("%d",&a[i][j]); } } for(k=0;k<2*n-1;k++) { for(i=0;i { for(j=0;j { if(i+j==k) { if(k%2==0) { printf("%d",a[j][i]); } else { printf("%d",a[i][j]); } } } } } return0; } 题9: 图像旋转 #include #defineN1000 inta[N][N]; intmain() { inti,j,n,m; scanf("%d%d",&n,&m); for(i=0;i { for(j=0;j { scanf("%d",&a[i][j]); } } for(j=1;j<=m;j++) { for(i=0;i { if(i! =0) printf(""); printf("%d",a[i][m-j]); } printf("\n"); } return0; } 题10: 数字排序 #include intmain() { inti,j,n,s=0; inta[1001]={0};//注意初始化赋值 scanf("%d",&n); for(i=0;i { scanf("%d",&s); a[s]++; } for(i=1001;i>0;i--)//i为从后找起的频数 { for(j=0;j<1001;j++)//数组下标从小到大 { if(a[j]==i)//找自己 { printf("%d%d\n",j,a[j]); } } } return0; } 题11: 数列分段 #include intmain() { inti,n,t=0; inta[1001]; scanf("%d",&n); for(i=0;i { scanf("%d",&a[i]); } for(i=0;i { if(a[i]! =a[i+1])t++; } printf("%d",t+1); return0; } 题12: 日期计算 #include intmain() { inty,d,day,i; intmouth[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; scanf("%d%d",&y,&d); if((y%4==0&&y%100! =0)||(y%400==0)) { mouth[2]++; } for(i=1;i<13;i++) { if(d>mouth[i]) { d=d-mouth[i]; if(d==0) { d=mouth[i]; break; } } elsebreak;//注意中断,确保月份不出错 } printf("%d\n%d",i,d); return0; } 题13: 数位之和 #include intmain() { intn,sum=0; scanf("%d",&n); while(n) { sum=sum+n%10; n=n/10; } printf("%d",sum); return0; } 题14: 消除类游戏 #include intmain() { inti,j,k,n,m,t=1; inta[31][31]={0}; intb[31][31]={0}; scanf("%d%d",&n,&m); for(i=0;i { for(j=0;j { scanf("%d",&a[i][j]); } } for(i=0;i { for(j=0;j { while(a[i][j]==a[i][j+1])//check行 { j++; if(j==m)break; t++; if(t>=3) { for(k=j-t+1;k<=j;k++) { b[i][k]=1; } } } t=1; } } for(j=0;j { for(i=0;i { while(a[i][j]==a[i+1][j])//check列 { i++; if(i==n)break; t++; if(t>=3) { for(k=i-t+1;k<=i;k++) { b[k][j]=1; } } } t=1; } } for(i=0;i { for(j=0;j { if(b[i][j])a[i][j]=0;//将找到的赋0 } } for(i=0;i { for(j=0;j { printf("%d",a[i][j]); } printf("\n"); } return0; } 题15: 折点计数 #include intmain() { inti,n,t=0; inta[1001]; scanf("%d",&n); for(i=0;i { scanf("%d",&a[i]); } for(i=0;i { if((a[i+1]a[i]&&a[i+1]>a[i+2]))t++; } printf("%d",t); return0; } 题16: 俄罗斯方块 #include intmain() { inti,j,n; intk=0,count=0,down=0; intx[4],y[4]; inta[15][10]; intb[4][4]; for(i=0;i<15;i++) { for(j=0;j<10;j++) { scanf("%d",&a[i][j]); } } for(i=0;i<4;i++) { for(j=0;j<4;j++) { scanf("%d",&b[i][j]); } } scanf("%d",&n); for(i=0;i<4;i++) { for(j=0;j<4;j++) { if(b[i][j]==1) { x[k]=i; y[k]=j; k++; } } } while (1) { for(i=0;i<4;i++) { if(a[x[i]+down][y[i]+n-1]==0) { count++; } } if(count==4) { down++; count=0; } else { if(x[i]+down==14) { for(j=0;j<4;j++) { a[x[j]+down][y[j]+n-1]=1; } break; } else { for(j=0;j<4;j++) { a[x[j]+down-1][y[j]+n-1]=1; } break; } } } for(i=0;i<15;i++) { for(j=0;j<10;j++) { printf("%d",a[i][j]); } printf("\n"); } return0; } 题17: 最大波动 #include #include intmain() { inti,n,t=0; inta[1001]={0}; scanf("%d",&n); for(i=0;i { scanf("%d",&a[i]); } for(i=0;i { if(t { t=abs(a[i]-a[i+1]); } } printf("%d",t); return0; } 题18: 火车购票 #include intmain() { inti,j,n,t,k; intflag; inta[100]={0}; intb[20]={0}; scanf("%d",&n); for(i=0;i<20;i++) { b[i]=5; } for(i=0;i { scanf("%d",&t); flag=0; for(j=0;j<20;j++) { if(b[j]>=t)//有连续座位 { for(k=1;k<=t;k++) { printf("%d",j*5+(5-b[j])+k); } printf("\n"); b[j]=b[j]-t; flag=1; break; } } if(flag==0&&t>0)//无连续座位且有人买票 { for(j=0;j<20;j++) { while(b[j]>=1)//分散买票 { printf("%d",j*5+(5-b[j])+1); t--; b[j]--; } } printf("\n");//注意换行的情况 } } return0; } 题19: 中间数 #include intmain() { inti,j,n,zuo,you; intt=-1; inta[1001]; scanf("%d",&n); for(i=0;i { scanf("%d",&a[i]); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CCF 历年 语言 答案 解析