CCF历年真题C语言答案解析Word文档下载推荐.docx
《CCF历年真题C语言答案解析Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《CCF历年真题C语言答案解析Word文档下载推荐.docx(31页珍藏版)》请在冰点文库上搜索。
gets(a);
sum=(a[0]-'
0'
)*1+(a[2]-'
)*2+(a[3]-'
)*3+(a[4]-'
)*4+(a[6]-'
)*5+(a[7]-'
)*6+(a[8]-'
)*7+(a[9]-'
)*8+
(a[10]-'
)*9;
if((sum%11==a[12]-'
)||(sum%11==10&
&
a[12]=='
X'
))//注意正确情况几种类型
printf("
Right"
);
else
if(sum%11==10)
a[12]='
;
else
a[12]=sum%11+'
puts(a);
题3:
相反数
inti,j,n,t=0;
inta[501];
a[i]);
n-1;
for(j=i+1;
j<
j++)
{
if(a[i]+a[j]==0)t++;
}
题4:
窗口
typedefstructwindow1{
intx1,x2,y1,y2,order;
}window;
voidInputwindow(windowws[],intn)
inti;
for(i=1;
i<
=n;
i++)
%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)
for(i=0;
n;
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];
for(i=pos-1;
i>
=0;
i--)
ws[i+1]=ws[i];
ws[0]=w;
inti,n,m,x,y,pos;
%d%d"
n,&
m);
windowws[n];
Inputwindow(ws,n);
m;
x,&
y);
pos=getpos(ws,n,x,y);
if(pos==-1){
printf("
IGNORED\n"
else{
%d\n"
ws[pos].order);
movewindow(ws,n,pos);
}
题5:
相邻数对
math.h>
inta[1001];
n-1;
if(abs(a[i]-a[j])==1)t++;
题6:
画图
inti,j,n,k,t=0;
inta[101][4];
a[i][0],&
a[i][1],&
a[i][2],&
a[i][3]);
101;
for(j=0;
for(k=0;
k<
k++)
{
if(j>
=a[k][0]&
a[k][2]&
i>
=a[k][1]&
a[k][3])
break;
}
if(k<
n)
t++;
题7:
门禁系统
inti,n,s=0;
inta[1001]={0};
%d"
a[s]);
题8:
z字形扫描
inti,j,k,n;
inta[500][500];
i<
j<
scanf("
a[i][j]);
for(k=0;
k<
2*n-1;
for(i=0;
for(j=0;
if(i+j==k)
{
if(k%2==0)
{
printf("
a[j][i]);
}
else
a[i][j]);
}
题9:
图像旋转
#defineN1000
inta[N][N];
inti,j,n,m;
n,&
m;
for(j=1;
=m;
if(i!
=0)
printf("
"
a[i][m-j]);
\n"
题10:
数字排序
inti,j,n,s=0;
inta[1001]={0};
//注意初始化赋值
for(i=1001;
0;
i--)//i为从后找起的频数
1001;
j++)//数组下标从小到大
if(a[j]==i)//找自己
%d%d\n"
j,a[j]);
题11:
数列分段
inti,n,t=0;
if(a[i]!
=a[i+1])t++;
t+1);
题12:
日期计算
inty,d,day,i;
intmouth[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
y,&
d);
if((y%4==0&
y%100!
=0)||(y%400==0))
mouth[2]++;
for(i=1;
13;
if(d>
mouth[i])
d=d-mouth[i];
if(d==0)
d=mouth[i];
elsebreak;
//注意中断,确保月份不出错
%d\n%d"
i,d);
题13:
数位之和
intn,sum=0;
while(n)
sum=sum+n%10;
n=n/10;
sum);
题14:
消除类游戏
inti,j,k,n,m,t=1;
inta[31][31]={0};
intb[31][31]={0};
while(a[i][j]==a[i][j+1])//check行
j++;
if(j==m)break;
if(t>
=3)
for(k=j-t+1;
=j;
b[i][k]=1;
t=1;
for(j=0;
while(a[i][j]==a[i+1][j])//check列
i++;
if(i==n)break;
for(k=i-t+1;
=i;
b[k][j]=1;
if(b[i][j])a[i][j]=0;
//将找到的赋0
题15:
折点计数
n-2;
if((a[i+1]<
a[i]&
a[i+1]<
a[i+2])||(a[i+1]>
a[i+1]>
a[i+2]))t++;
题16:
俄罗斯方块
inti,j,n;
intk=0,count=0,down=0;
intx[4],y[4];
inta[15][10];
intb[4][4];
15;
10;
4;
b[i][j]);
i++)
if(b[i][j]==1)
x[k]=i;
y[k]=j;
k++;
while
(1)
if(a[x[i]+down][y[i]+n-1]==0)
count++;
if(count==4)
down++;
count=0;
if(x[i]+down==14)
for(j=0;
a[x[j]+down][y[j]+n-1]=1;
break;
else
a[x[j]+down-1][y[j]+n-1]=1;
题17:
最大波动
if(t<
abs(a[i]-a[i+1]))
t=abs(a[i]-a[i+1]);
题18:
火车购票
inti,j,n,t,k;
intflag;
inta[100]={0};
intb[20]={0};
20;
b[i]=5;
flag=0;
if(b[j]>
=t)//有连续座位
for(k=1;
=t;
printf("
j*5+(5-b[j])+k);
b[j]=b[j]-t;
flag=1;
if(flag==0&
t>
0)//无连续座位且有人买票
while(b[j]>
=1)//分散买票
j*5+(5-b[j])+1);
t--;
b[j]--;
//注意换行的情况
题19:
中间数
inti,j,n,zuo,you;
intt=-1;
zuo=0;
//注意初始化
you=0;
j++)//注意j的范围
if(a[i]>
a[j])
zuo++;
if(a[i]<
you++;
if(zuo==you)
t=a[i];
题20:
工资计算
inti,t;
intx=0;
if(t<
=3500)
for(i=3600;
=100000;
i=i+100)
if(i>
=3600&
=5000)
x+=(i-3500)*0.03;
if(i>
=5100&
=8000)
x+=(i-5000)*0.1+45;
=8100&
=12500)
x+=(i-8000)*0.2+45+300;
=12600&
=38500)
x+=(i-12500)*0.25+45+300+900;
=38600&
=58500)
x+=(i-38500)*0.3+45+300+900+6500;
=58600&
=83500)
x+=(i-58500)*0.35+45+300+900+6500+6000;
=83600)
x+=(i-83500)*0.45+45+300+900+6500+6000+8750;
if(i-x==t)
i);
break;
题21:
分蛋糕
inti,n,k;
intsum=0,t=0;
k);
scanf