资源描述
1.john的农场
#include<stdio.h>
#define N 20
int main()
{
int a[N+1][N+1];
int n,m,i,j,min,k,l,q,sum;
int w,minx,max;
scanf("%d",&n);
while(n--)
{
int b[N+1]={0};
scanf("%d",&m);
for(i=1;i<=m;i++)
for(j=1;j<=m;j++)
scanf("%d",&a[i][j]);
sum=0;q=m-1;w=1;
while(q)
{
min=99999;
for(i=1;i<m;i++)
for(j=i+1;j<=m;j++)
{
if(a[i][j]==0)
continue;
else
{
if(min>a[i][j])
{
min=a[i][j];
k=i;
l=j;
}
}
}
if(b[k]==0&&b[l]==0)
{b[k]=w;b[l]=w;w++;
sum=sum+min;a[k][l]=0;q--;
}
else if(b[k]==0||b[l]==0)
{if(b[k]==0) b[k]=b[l];
if(b[l]==0) b[l]=b[k];
sum=sum+min;a[k][l]=0;q--;
}
else if(b[k]==b[l]) a[k][l]=0;
else {
minx=b[k];max=b[k];
if(b[l]<b[k]) minx=b[l];
else max=b[l];
for(i=1;i<=m;i++)
if(b[i]==max)
b[i]=minx;
sum=sum+min;a[k][l]=0;q--;
}
}
printf("%d\n",sum);
}
return 0;
}
2.xtu方阵
#include<stdio.h>
int main()
{
int n,i,j,s=0;
while(1)
{
scanf("%d",&n);
if(n==0)
break;
s++;
printf("Case %d:\n",s);
for(i=0;i<3*n;i++)
{
for(j=0;j<n;j++)
{
printf("XTU");
}
printf("\n");
}
printf("\n");
}
return 0;
}
3.z字型
#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
char a[10][10],b[100];
int i,j,l,n,k;
double s;
while(scanf("%s",b)!=-1)
{
s=strlen(b);
s=sqrt(s);
n=int(s);
l=0;
for(i=0;i<n;i++)
{
if(i%2==0)
for(j=0;j<i+1;j++)
a[i-j][j]=b[l++];
else
for(j=0;j<i+1;j++)
a[j][i-j]=b[l++];
}
for(i=n-2,k=n;i>=0;i--,k++)
{
if(i%2==0)
for(j=0;j<i+1;j++)
a[n-1-j][k-n+1+j]=b[l++];
else
for(j=0;j<i+1;j++)
a[k-n+1+j][n-1-j]=b[l++];
}
for(i=0;i<s;i++)
{
for(j=0;j<s;j++)
printf("%c",a[i][j]);
printf("\n");
}
printf("\n");
}
return 0;
}
4.
#include <stdio.h>
int main()
{
int k,i,j,x,y;
char a[5],b[5];
while(1)
{
scanf("%s",a);
if(a[0]=='0') break;
scanf("%d",&k);
while(k--)
{
scanf("%s",b);
x=0;y=0;
for(i=0;i<4;i++)
if(a[i]==b[i]) x++;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
if(a[i]==b[j]) y++;
}
if(k!=0)
printf("%dA%dB ",x,y-x);
else
printf("%dA%dB\n",x,y-x);
}
}
return 0;
}
5.成对的字符串
#include<stdio.h>
#define N 1000
int main()
{
char a[N+1];
int s,x,n,i=1;
char *p,*q,m;
scanf("%d",&s);
while(s)
{
n=1;
if((s--)==0)
break;
scanf("%s",a);
p=a;
while(*p)
{
if(*p=='*')
{
p++;
continue;
}
q=p;
m=*q;
i=1;
x=0;
while(*q&&(*q)!='*')
{
q++;
if(m==*q)
{
i++;
if(x==0)
*q='*';
x++;
}
}
if(i%2!=0)
{
n=0;
break;
}
p++;
}
if(n==0)
printf("No\n");
else
printf("Yes\n");
}
return 0;
}
6.合法的整数
#include<stdio.h>
#include<string.h>
#define N 100
char a[N];
int fun()
{
int len,jia,jian,i,j,t,k;
len = strlen(a);
jia = jian = 0;
for(i=0;i<len;i++)
if(a[i]!=' ' && a[i]!='-' && a[i]!='+' && !(a[i]>='0'&&a[i]<='9'))
return 0;
for(i=0;i<len;i++) {
if(a[i]=='+') jia++;
if(a[i]=='-') jian++;
}
if(jia+jian>1)
return 0;
t=-1;
for(i=0;i<len;i++)
if(a[i]!=' ')
{ t=i;break; }
if(t==-1)
return 0;
k=t;
if(a[t]=='+' || a[t]=='-')
{
for(i=t+1;i<len;i++)
if(a[i]!=' ')
{ k=i;break; }
if(k==t)
return 0;
}
if(k==t && jia+jian>=1)
return 0;
if(a[k]=='0') {
for(i=k+1;i<len;i++) if(a[i]!=' ')
return 0;
}
for(i=k+1;i<len;i++) if(a[i-1]==' ' &&a[i]!=' ')
return 0;
return 1;
}
int main()
{
while(gets(a))
{
if(fun()) printf("Yes\n");
else printf("No\n");
}
return 0;
}
7.凯撒的密码
#include<stdio.h>
int main()
{
int e,i,k;
char a[1001];
scanf("%d",&e);
getchar();
while(e)
{
i=0;
while(a[i]!='\n')
{
i++;
a[i]=getchar();
}
for( k=1;k<i;k++)
{
if(a[k]>'E'&&a[k]<='Z')
a[k]-=5;
else{
if(a[k]>='A'&&a[k]<='E')
a[k]+=21;}
}
for(k=1;k<i;k++)
printf("%c",a[k]);
printf("\n");
e--;
}
return 0;
}
8.括号编码
#include <stdio.h>
int main()
{
int a[30],b[30],c[30],k,n,i,j,m,s;
scanf("%d",&k);
while(k--)
{
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
b[0]=a[0];
for(j=1;j<n;j++)
b[j]=a[j]-a[j-1];
for(m=0;m<n;m++)
{
if(b[m]!=0)
{
c[m]=1;
b[m]--;
}
else
{
s=0;
for(i=m;i>=0;i--)
{
if(b[i]==0)
s++;
else
{
b[i]--;
break;
}
}
c[m]=s+1;
}
}
for(i=0;i<n;i++)
{
if(i==n-1)
printf("%d",c[i]);
else
printf("%d ",c[i]);
}
printf("\n");
}
return 0;
}
9.狼群战术
#include<stdio.h>
#include<string.h>
#define N 1000
int main()
{
char a[N+1],b[5][5]={'Q','W','E','R','T','Y','U','I','O','P','A','S','D','F','G','H','J','K','L','Z','X','C','B','N','M'};
char c[N+1],*p,*q;
int m,i,j,k,s;
scanf("%d",&m);
s=getchar();
while(m--)
{
i=0;
while(a[i++]!=10)
{
a[i]=getchar();
}
p=a+1;
i=1;
while(*p!=10)
{
q=p+1;
if(*p>='A'&&*p<='E'&&*p!='F')
{
j=*p-65;
k=*q-65;
c[i++]=b[j][k];
p=p+2;
}
else
if(*p=='F')
{
c[i++]='V';
p=p+2;
}
else
{
c[i++]=*p;
p++;
}
}
for(s=1;s<i;s++)
printf("%c",c[s]);
printf("\n");
}
return 0;
}
10.列车长的烦恼
#include<stdio.h>
#define N 100
int main()
{
int a[N+1],i,j,n,m,s,r;
int b[N+1];
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&m);
for(j=1;j<=m;j++)
scanf("%d",&a[j]);
j=1;r=0;
for(s=1;s<=m;s++)
{
while(a[s]>=j)
{
r++;
b[r]=j;
j++;
}
if(a[s]==b[r])
r--;
}
if(r==0)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}
11.零件
#include<stdio.h>
#define N 100
int main()
{
int n,m,i,c[N],b[N],ans,sum,len;
char a[N][N];
char *p,*q,*f;
scanf("%d",&n);
while(n--)
{
scanf("%d",&m);
getchar();
for(i=1;i<=m*2;i++)
gets(a[i]);
for(i=1;i<=2*m;i++)
{
p=a[i];
while(*p!='X') p++;
f=p;
while(*p)
{
if(*p=='X')
q=p;
p++;
}
if(i<=m)
c[i]=q-f+1;
else
b[i-m]=q-f+1;
}
sum=0;
for(i=1;i<=m;i++)
if(c[i]+b[i]>sum)
sum=c[i]+b[i];
ans=0;
for(i=1;i<=2*m;i++)
{
p=a[i];len=0;
while(*p)
{
if(*p=='X')
len++;
p++;
}
if(i<=m)
c[i]=len;
else
b[i-m]=len;
}
for(i=1;i<=m;i++)
ans=ans+sum-c[i]-b[i];
printf("%d\n",ans);
}
return 0;
}
12.平方数
#include<stdio.h>
#define N 100
int main()
{
long a[N+1];
int n,i,j,s;
while(1)
{
scanf("%d",&n);
if(n==0)
break;
s=0;
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
for(i=1;i<=n;i++)
{
if(a[i]>10000)
continue;
else
for(j=1;j<=n;j++)
if(a[i]*a[i]==a[j])
s++;
}
printf("%d\n",s);
}
return 0;
}
13.青蛙王子
#include<stdio.h>
int main()
{
int x,y,z,max,a,b;
while(1)
{
scanf("%d",&x);
scanf("%d",&y);
scanf("%d",&z);
if(x==0&&y==0&&z==0)
break;
if(x==0&&y==0&&z!=0)
{
printf("No\n");
continue;
}
else
{
if(x*y==0)
{
if(z%(x+y)==0)
{
printf("Yes\n");
continue;
}
else
{
printf("No\n");
continue;
}
}
}
max=y;
if(x>max)
{
max=x;
x=y;
y=max;
}
while(1)
{
a=y%x;
if(a==1||a==0)
break;
else
{
y=x;
x=a;
}
}
if(a==0)
a=x;
if(z%a==0)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}
14.数字序列
#include<stdio.h>
#define N 4000000
int b[100000];
int a[N]={0};
int main()
{
b[0]=0;
int i,n,k=1;
a[1]=1;
for(i=1;i<N,k<100000;i++)
{
if(a[i])
{
b[k++]=i;
if(i*2+1<N&&a[i*2+1]==0) a[i*2+1]=1;
if(i*3+1<N&&a[i*3+1]==0) a[i*3+1]=1;
}
}
while(1)
{ scanf("%d",&n);
if(n<0) break;
printf("%d\n",b[n]);
}
return 0;
}
15.小希的迷宫
#include<stdio.h>
#define N 100000
int main()
{
int n,m,s;
int max,i,w,ma,min,q;
while(1)
{
scanf("%d%d",&n,&m);
if(n==-1&&m==-1) break;
w=0;q=0;max=0;s=1;
int a[N+1]={0};
while(1)
{
if(n==0&&m==0) break;
if(n>max) max=n;
if(m>max) max=m;
if(a[n]==0&&a[m]==0)
{a[n]=s;a[m]=s;s++;}
else
if(a[n]==0||a[m]==0)
{
if(a[n]!=0) a[m]=a[n];
if(a[m]!=0) a[n]=a[m];
}
else
if(a[n]==a[m])
q=1;
else
{
min=a[n];ma=a[n];
if(a[m]<min) min=a[m];
else ma=a[m];
for(i=1;i<=max;i++)
if(a[i]==ma)
a[i]=min;
}
scanf("%d%d",&n,&m);
}
for(i=1;i<=max;i++)
if(a[i]==1||a[i]==0)
continue;
else
{w=1;break;}
if(w==0&&q==0)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}
16.一个小游戏
#include<stdio.h>
#define N 1000
int ne[N],pr[N];
int main()
{
int i,k,m,n,a;
scanf("%d",&k);
while(k--)
{
scanf("%d%d",&n,&m);
a=1;
for(i=1;i<n;i++)
ne[i]=i+1;
ne[n]=1;
for(i=2;i<=n;i++)
pr[i]=i-1;
pr[1]=n;
while(n>1)
{
for(i=1;i<m;i++)
a=ne[a];
ne[pr[a]]=ne[a];
pr[ne[a]]=pr[a];
a=ne[a];
n--;
if(n==1)
break;
for(i=1;i<m;i++)
a=pr[a];
ne[pr[a]]=ne[a];
pr[ne[a]]=pr[a];
a=pr[a];
n--;
}
printf("%d\n",a);
}
return 0;
}
17.有多少个1
#include<stdio.h>
int main()
{
long n;
int m;
while(scanf("%d",&n)!=-1)
{
m=0;
if(n<0)
{
n=n+2147483648;
m++;
}
while(n)
{
if(n%2==1)
m++;
n=n/2;
}
printf("%d\n",m);
}
return 0;
}
18.远古文明算术题
#include <stdio.h>
int main()
{
int k,i,s,r,sum,len;
int stack[201],top;
char a[201],b[201];
char *p,*q;
scanf("%d",&k);
getchar();
while(k--)
{
gets(a);
p=a;s=0;top=0;
while(*p)
{
if(*p==' ') {p++; continue;}
if(*p>='0'&&*p<='9')
{
q=p;
while(*q!=' ') q++;
len=q-p;sum=0;
while(len--)
{
r=*p-'0';
for(i=1;i<=len;i++)
r=10*r;
sum=sum+r;
p++;
}
stack[top++]=sum;
p++;
}
else
{
b[s++]=*p;
if(s==1)
switch(b[0])
{
case '+':{stack[top-2]=stack[top-2]+stack[top-1];top--;s--;break;}
case '-':{stack[top-2]=stack[top-2]-stack[top-1];top--;s--;break;}
case '*':{stack[top-2]=stack[top-2]*stack[top-1];top--;s--;break;}
case '/':{stack[top-2]=stack[top-2]/stack[top-1];top--;s--;break;}
case '%':{stack[top-2]=stack[top-2]%stack[top-1];top--;s--;break;}
}
p++;
}
}
printf("%d\n",stack[0]);
}
return 0;
}
19.整数分类
#include <stdio.h>
#include<string.h>
#define N 500
int main()
{
int n,sum=0,x,len,i;
char a[N+1];
while(1)
{
scanf("%s",a);
len=strlen(a);
if(a[0]=='0') break;
if(len==1) printf("%d\n",a[0]-'0');
else
{
n=0;
for(i=0;i<len;i++)
{
a[i]=a[i]-'0';
n=n+a[i];
}
while(n>9)
{
sum=0;
while(n>0)
{
x=n%10;
sum+=x;
n=n/10;
}
n=sum;
}
printf("%d\n",n);
}
}
return 0;
}
20.重构二叉树
#include<stdio.h>
#include<string.h>
#define N 100
char a[N],b[N],s[N][3];
int ca,n,i,lena,l
展开阅读全文