CCF历年真题C语言答案docWord格式文档下载.docx
《CCF历年真题C语言答案docWord格式文档下载.docx》由会员分享,可在线阅读,更多相关《CCF历年真题C语言答案docWord格式文档下载.docx(27页珍藏版)》请在冰豆网上搜索。
)*9;
if((sum%ll==a[12]~,)II(sum%ll==10&
&
a[12]==,X'
))//注意正确情况几种类型
printf("
Right"
);
else
if(sum%11==10)
a[12]=,X,;
a[12]=sum%11+,O'
;
puts(a);
题3:
相反数
stdio.h>
inti,j,n,t=0;
inta[501];
scanf(/z%dz/,&
i++)
scanf("
%d"
&
a[i]);
nT;
for(j二i+1;
j<
j++)
if(a[i]+a[j]==0)t++;
printft);
题4:
窗口
typedefstructwindowl{
intxl,x2,yl,y2,order;
}window;
voidInputwindow(windowws[],intn)
inti;
for(i=l;
i<
=n;
i++)
%d%d%d%d:
&
ws[n-i].xl,&
ws[n~i].yl,&
ws[n~i].x2,&
ws[n~i].y2);
ws[n-i].order=i;
intgetpos(windowws[],intn,intx,inty)
for(i=0;
n;
if(x>
=ws[i].xl&
x<
=ws[i].x2&
y>
二\vs[i].yl&
y<
=ws[i].y2){
returni;
return-1;
voidmovewindow(windowws[],intn,intpos)
windoww-ws[pos];
for(i=pos~l;
i>
=0;
i--)
ws[i+l]二ws[i];
ws[0]=w;
inti,n,m,x,y,pos;
scanf(,z%d%d,z,&
n,&
m);
windowws[n];
Inputwindow(ws,n);
m;
scanf(zz%d%d,/,&
x,&
y);
pos二getpos(ws,n,x,y);
if(pos~~l){
printf(z/lGN0RED\nz/);
else{
%d\rT,ws[pos].order);
movewindow(ws,n,pos);
题5:
相邻数对
math.h>
5nclude〈sc+dio.h〉
intmain。
宀
inti"
j;
tHm
int匕101二4〕-
scanf(、£
d、「Kn)
【
for(iH0八i〈rui丰)
亠
scanf(、豪d%d%d%d、「0a〔i二orGa〔i〕〔口烬〔i二2〕y邑i〕〔3三
)
for(iH0八i〈lori丰)
for(jH9j〈10r7j++)
for(kH0;
k〈三罕+)
if(j〉2k〕a第j〈a〔k二2〕&
i〉Ha〔EE第i〈a〔k二3〕)break-
if(k〈n)t+,t
inta〔100亍scanf(、棗d、「$n)-
for(iHsi〈rui++)
scanf(、、瓷、「0a〔i〕)八
for(iHsi〈n—rri丰)
『or(jHi+rrj〈n二++)
if(abs(a〔i〕—as)Hl)t++
prinbf(、9d、「t)-
return0-
®
6“Bs
printf(*%d,z,t);
return0;
题7:
门禁系统
#include<
stdio.h>
inti,n,s=0;
inta[1001]={0};
scanf(,z%d,z,&
printf(,z%da[s]);
题8:
z字形扫描
inti,j,k,n;
inta[500][500];
scanf("
i<
for(j=0;
j<
a[i][j]);
for(k=0;
k<
2*n-1;
k卄)
if(i+j==k)
if(k%2==0)
printf(,z%d“,a[j][i]);
printf(z,%d”,a[i][j]);
题9:
图像旋转
^defineN1000
inta[N][N];
inti,j,n,m;
%d%d"
卄+)
m;
%d:
a[i][j]);
for(j=1;
=m;
if(i!
=0)
printffzz);
printf("
a[i][m-j]);
\n"
题10:
数字排序
inti,j,n,s=0;
inta[1001]={0};
//注意初始化赋值
讥+)
for(i二1001;
i>
0;
1-)//i为从后找起的频数
1001;
j++)//数组下标从小到大{
if(a[j]二二i)//找自己
printf(,z%d%d\nz/,j,a[j]);
题11:
数列分段
inti,n,t二0;
inta[1001];
n-l;
if(a[i]!
=a[i+1])t++;
printft+1);
题12:
日期计算
inty,d,day,i;
intmouth[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
scanf("
y,&
d);
if((y%4=0&
y%100!
=0)||(y%400二二0))
mouth[2]卄;
for(i二]
I;
13;
if(d{
>
mouth[i])
d
二d-mouth[i];
if(d二二0)
d=mouth[i];
break;
elsebreak;
〃注意中断,确保月份不出错}
printf(//%d\n%d,,)i,d);
题13:
数位之和
intn,sum=0;
scanf(z,%d/z,&
while(n)
sum=sum+n%10;
n=n/10;
题14:
消除类游戏
inti,j,k,n,m,t=l;
inta[31][31]={0};
intb[31][31]={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;
whi1e(a[i][j]==a[i+l][j])//check列
i++;
if(i==n)break;
for(k=i-t+1;
=i;
b[k][j]=1;
i〈n;
if(b[i][j])a[i][j]=0;
//将找到的赋0
printf(z/%d"
、a[i][j]);
printf(z/\n,z);
题15:
折点计数
inti,n,t=0;
%d〃,&
n~2;
if((a[i+1]<
a[i]&
a[i+1]<
a[i+2])||(a[i+1]>
a[i+1]>
a[i+2]))t++;
printf(z/%dz,,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]);
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)
a[x[j]+down][y[j]+n-1]二1;
break;
a[x[j]+down-l][y[j]+n-1]二1;
}
printf(,z%d"
printf(z/\n/z);
题17:
最大波动
scanf&
n-1:
if(t<
abs(a[i]-a[i+1])){
t=abs(a[i]-a[i+1]);
printf(z/%d,z,t);
题1&
火车购票
inti,j,n,t,k;
intflag;
inta[100]={0};
intb[20]={0};
20;
b[i]=5;
t);
flag=0;
if(b[j]>
=t)〃有连续座位
for(k=1;
=t;
printf(z/%d”,j*5+(5-b[j])+k);
printf(〃\n〃);
b[j]=b[j]-t;
flag=1;
if(flag==0&
t>
0)//无连续座位且有人买票
while(b[j]>
=1)〃分散买票
printf(,?
%d”,j*5+(5-b[j])+1);
t—;
b[j]—;
printf(z/\nz/);
//注意换行的情况
题19:
中间数
stdio>
h>
inti,j,n,zuo,you;
intt=-1;
{scanf("
zuo=0;
//注意初始化
you=0;
j++)//注意j的范围
if(a[i]>
a[j])
ZUO++;
if(a[i]<
you++;
if(zuo==you)
t=a[i];
题20:
工资计算
intmain()
inti,t;
intx=0;
=3500)
{printft);
for(i=3600;
=100000;
i=i+100)
if(i>
=3600&
=5000)
x+=(i-3500)*0.03;
=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)
printf(,z%d,z,i);
题21:
分蛋糕
L
inti,n,k;
intsum=0,t=0;
k);
sum=sum+a[i];
if(sum>
=k)
t++;
sum=0;
elseif(i==n-1)//注意这里的elseif
题22:
学生排队
intp,q,k;
for(i=1;
=n;
a[i]二i;
=m;
p,&
q);
if(a[j]==p)
//注意屮断
if(q<
0)
for(k=-1;
k>
=q;
k-)//注意循环移动数组中的元素
a[j+k+1]=a[j+k];
a[j+q]二p;
elseif(q>
q;
a[j+k]二a[j+k+1];
}a[j+q]二p;
二n;
printf(,z%da[i]);
题23:
打酱油
intmdin()
30)
intN,t=0;
scanf("
N);
if(N<
N/10;
30)/10+4;
(N/
((N-(N/50)*
〃注意计算
50)*7+((N-(N/50)*50)/30)*4+(N-(N/50)*5050)/30)*30)/10;
printf(〃%cT,t);
题24:
公共钥匙盒
#include<
structscq{intkey;
intaction;
inttime;
temp=arr[i];
arr[i]=arr[j]arr[j]=temp;
elseif(arr[i].time二二arr[j].time)
arr[i]=arr[j];
arr[j]=temp;
elseif(arr[i].action二二arr[j].ac