XDOJ计算机程序设计参考代码
1、由HarryChen编写代码并收集在xdoj上出现的所有考题。
2、本文仅用于学习并修改同学们自己的代码。为了达到学习的目的,不建议直接盗链提交代码。
1、三角形判断
#include
int main()
{
int a,b,c,C;
scanf("%d %d %d",&a,&b,&c);
C=a+b+c;
(((a+b>c)&&(a+c>b))&&(b+c>a))==1?printf("%d",C):printf("No");
return 0;
}
2、部分排序
#include
int main()
{
int num[1000],i,j,m,n,trans;
scanf("%d %d",&m,&n);
for(i=0;i<m;i++) scanf("%d",&num[i]);
for(i=0;i<m;i++)
{
for(j=0;j<m-1;j++)
{
if(num[j]<num[j+1])
{
trans=num[j];
num[j]=num[j+1];
num[j+1]=trans;
}
}
}
if(m>n) for(i=0;i<n;i++) printf("%d ",num[i]);
if(m<=n) for(i=0;i<m;i++) printf("%d ",num[i]);
}
3、字符串查找
#include
int main()
{
char a[26],b[256],ch;
int i,j,m,a1,b1,time=0;
gets(a);
gets(b);
for(ch=97;ch<=122;ch++)
{
a1=0;b1=0;
for(i=0;i<=26;i++)
{
if(ch==a[i]) a1=1;
}
for(i=0;i<=256;i++)
{
if(ch==b[i]) b1=1;
}
if(a1+b1==2)
{
printf("%c ",ch);
time++;
}
}
if(time==0) printf("No");
}
4、世界杯排名
#include
struct info
{
char name[20];
int win,tie,lose,jq,sq,jf,jsq;
} ;
struct info trans;
int main()
{
int m,n;
scanf("%d %d",&n,&m);
void input(struct info t[],int n);
void output(struct info t[],int m);
void sort(struct info t[],int n);
struct info t[32],*p=t;
input(p,n);
sort(p,n);
output(p,m);
return 0;
}
void input(struct info t[],int n)
{
int i;
for(i=0;i<n;i++)
{
scanf("%s %d %d %d %d %d",&t[i].name,&t[i].win,&t[i].tie,&t[i].lose,&t[i].jq,&t[i].sq);
t[i].jf=t[i].win*3+t[i].tie;
t[i].jsq=t[i].jq-t[i].sq;
}
}
void sort(struct info t[],int n)
{
int i,j,k;
for(k=0;k<n-1;k++)
{
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1;j++)
{
if(t[j].jf<t[j+1].jf)
{
trans=t[j];
t[j]=t[j+1];
t[j+1]=trans;
}
}
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n-1;j++)
{
if(t[j].jf==t[j+1].jf&&t[j].jsq<t[j+1].jsq)
{
trans=t[j];
t[j]=t[j+1];
t[j+1]=trans;
}
}
}
}
void output(struct info t[],int m)
{
int i;
for(i=0;i<m;i++) printf("%d %s %d %d\n",i+1,t[i].name,t[i].win*3+t[i].tie,t[i].jsq);
}
6、温度转换
#include
int main()
{
int f;
float c;
scanf("%d",&f);
c=(f-32)*5/9.0;
printf("%.2f",c);
return 0;
}
7、计算球体重量
#include
double Ag(double v)
{
double m;
m=19.3*v;
return m;
}
double Fe(double v)
{
double m;
m=7.86*v;
return m;
}
int main()
{
double d1,d2,v1,v2;
scanf("%lf %lf",&d1,&d2);
v1=3.1415926*d1*d1*d1/6000;
v2=3.1415926*d2*d2*d2/6000;
printf("%.3lf %.3lf\n",Fe(v1),Ag(v2));
return 0;
}
8、阶梯电价计费
#include
int main()
{
float a,ans;
scanf("%f",&a);
if (a<=110) ans=a*0.5;
else if (a>110&&a<=210) ans=55+(a-110)*0.55;
else if (a>210) ans=110+(a-210)*0.70;
printf("%.2f",ans);
}
9、计算某月天数
#include
int main()
{
int y,m,d,leap;
scanf("%d %d",&y,&m);
if(m==1||m==3||m==5||m==7||m==8||m==10||m==12)
{
d=31;
printf("%d",d);
}
else if(m==4||m==6||m==9||m==11)
{
d=30;
printf("%d",d);
}
else if(m==2)
{
if((y%4==0&&y%100!=0)||y%400==0)
{
d=29;
printf("%d",d);
}
else
{
d=28;
printf("%d",d);
}
}
}
10、计算整数各位数字之和
#include
int main()
{
int a,sum=0;
scanf("%d",&a);
while(a>=1)
{
sum+=a%10;
a=(a-a%10)/10;
}
printf("%d\n",sum);
return 0;
}
11、完数
#include
int main()
{
int a,b,num1,num2,i=0;
scanf("%d %d",&a,&b);
for (num1=a;num1<=b;num1++)
{
i=0;
for (num2=1;num2<num1;num2=++)
{
if (num1%num2==0) i=i+num2;
}
if(i==num1&&i!=1) printf("%d\n",i);
}
return 0;
}
12、最大公约数
#include
#include
int main()
{
int m,n,nummax,nummin;
scanf("%d %d",&m,&n);
while(m!=0||n!=0)
{
nummax=m;
for(nummax=m;nummax>=1;nummax--)
{
if((m%nummax==0)&&(n%nummax==0))
{
printf("%d\n",nummax);
break;
}
}
scanf("%d %d",&m,&n);
}
return 0;
}
14、递归数列
#include
double fun(int i)
{
if(i==1) return 1;
else return 1/(1+fun(i-1));
}
int main()
{
int a,i,ans;
scanf("%d",&a);
for(i=0;i<a;i++)
{
scanf("%d",&ans);
printf("%.6lf\n",fun(ans));
}
}
16、歌德巴赫猜想
#include
void exec(int num)
{
int i;
for(i=2;i<num;i++)
{
if(isprime(i)+isprime(num-i)==0)
{
printf("%d %d\n",i,num-i);
break;
}
}
}
int isprime(int a)
{
int i,ans=1;
for(i=2;i<a;i++) ans=ans*(a%i);
if (ans==0) return 1;
else return 0;
}
int main()
{
int time,a,i;
scanf("%d",&time);
for(i=1;i<=time;i++)
{
scanf("%d",&a);
exec(a);
}
return 0;
}
18、回文数
#include
#include
int main()
{
int time,t,sum=0,i,len,num,a,d,reverse;
scanf("%d",&time);
for(i=1;i<=time;i++)
{
scanf("%d",&a);
num=a;
len=0;
sum=0;
reverse=0;
while(num>=1)
{
num/=10;
len++;
}
reverse=0;
num=a;
for (t=1;t<=len;t++)
{
d=num%10;
num=(num-d)/10;
reverse=reverse*10+d;
}
num=a;
if(reverse==a)
{
while(num>=1)
{
sum+=num%10;
num=(num-num%10)/10;
}
printf("%d\n",sum);
}
if (reverse!=a) printf("no\n");
}
return 0;
}
19、排序2
#include
int main()
{
int scanNum,i,j,t,trans,num2=0;
scanf("%d",&scanNum);
int a[100];
for (i=0;i<100;i++) scanf("%d",&a[i]);
for(j=0;j<100;j++)
{
for (i=0;i<100;i++)
{
trans=0;
if (a[i]<=a[i+1])
{
trans=a[i+1];
a[i+1]=a[i];
a[i]=trans;
}
}
}
for (i=0;i<100;i++) if (a[i]%2==0) printf("%d ",a[i]);
for (i=0;i<100;i++) if (a[i]%2!=0) printf("%d ",a[i]);
printf("\n");
return 0;
}
20、拼数字
#include
#include
int pnum(int a)
{
long ans=1;
int i=2;
while(i<a)
{
ans=a%i;
i++;
if(ans==0) break;
}
if(ans!=0||a==0) return 0;
else return 1;
}
void exe(int a)
{
int i;
if (pnum(a)==1)
{
for(i=a-1;i>=2;i--)
{
if(a%i==0)
{
printf("%d\n",i);
break;
}
}
}
else printf("%d\n",a);
}
int main()
{
int a,num=0,i;
char c[100];
while(1)
{
gets(c);
if(strlen(c)==0) break;
num=0;
for(i=0;i<=strlen(c);i++)
{
if(c[i]<='9'&&c[i]>='0')
{
num*=10;
num+=c[i]-'0';
}
}
exe(num);
}
return 0;
}
21、马鞍点
#include
int isMin(int *p,int i,int m)
{
int min=*p,t,ans1=0;
for(t=0;t<m;t++)
{
if(*(p-i+t)<min)
{
return 0;
ans1=1;
}
}
if(ans1==0)
{
return 1;
}
}
int isMax(int *p,int i,int n)
{
int max=*p,f,ans=0;
for(f=0;f<n;f++)
{
if(*(p-100*i+100*f)>max)
{
return 0;
ans=1;
}
}
if(ans==0)
{
return 1;
}
}
int main()
{
int a[100][100],*p=a;
int m,n;
int i,j;
int ans=0;
scanf("%d %d",&m,&n);
for(i=0;i<m;i++) for(j=0;j<n;j++) scanf("%d",&a[i][j]);
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
if(isMin(p+100*i+j,j,n)==1&&isMax(p+100*i+j,i,m)==1)
{
ans=1;
printf("%d %d %d\n",i,j,*(p+100*i+j));
}
}
}
if(ans==0) printf("no\n");
}
22、等差数列
#include
int main()
{
int num[100];
int time,len,i,j,k,ans=1,trans;
scanf("%d",&time);
for(i=0;i<time;i++)
{
scanf("%d",&len);
for(j=0;j<len;j++) scanf("%d",&num[j]);
for(j=0;j<len;j++)
{
for(k=0;k<len;k++)
{
if(num[k]>num[k+1])
{
trans=num[k];
num[k]=num[k+1];
num[k+1]=trans;
}
}
}
for(j=0;j<len-2;j++)
{
if(num[j+1]*2!=num[j]+num[j+2])
{
printf("no\n");
ans=0;
break;
}
}
if(ans==1&&num[1]-num[0]>=0) printf("%d\n",num[1]-num[0]);
if(ans==1&&num[1]-num[0]<0) printf("%d\n",num[0]-num[1]);
ans=1;
}
return 0;
}
23、寻找最长的行
#include
#include
int main(){
int m,n=0;char a[100],b[100];
while(strcmp(gets(a),"***end***")!=0)
{
m=strlen(a);
if(m>n){
n=m;strcpy(b,a);}
if(m=n);
}
printf("%d\n%s\n",n,b);
return 0;
}
24、字符串压缩
#include
#include
int main()
{
char a[50];
int i,j,len,s;
gets(a);
len=strlen(a);
while(i<=len)
{
if (a[i]>=48&&a[i]<=57) i++;
if (a[i]>=48&&a[i]<=57) i++;
printf("%c",a[i]);
if(a[i+1]>=48&&a[i+1]<=57)
{
s=(int)(a[i+1])-49;
for(j=0;j<s;j++) printf("%c",a[i]);
}
if((a[i+2]>=48&&a[i+2]<=57)&&(a[i+1]>=48&&a[i+1]<=57))
{
s=((int)(a[i+1])-48)*9+(int)(a[i+2])-48;
for(j=0;j<s;j++) printf("%c",a[i]);
}
s=0;
i++;
}
}
25、括号匹配
#include
#include
int ctra(int a)
{
if(a<=0) return a;
if(a>0) return a+1;
}
int tra(char *p)
{
if(*p=='(') return 1;
else if(*p==')') return -1;
else if(*p=='[') return 3;
else if(*p==']') return -3;
else if(*p=='{') return 5;
else if(*p=='}') return -5;
else return 0;
}
int seek(char*p,int begin,int end)
{
int i,j,ans=0,re=1,num=0,cans=0;
for(i=begin;i<end;i++)
{
ans+=tra(p+i);
cans+=ctra(tra(p+i));
}
if(ans==0&&cans!=0)
{
for(i=begin;i<=end;i++)
{
if(tra(p+i)>0)
{
re=0;num++;
for(j=i;j<=end;j++)
{
if(tra(p+j)+tra(p+i)==0)
{
return seek(p,i+1,j);
re=1;
break;
}
if(tra(p+j)<0&&tra(p+j)+tra(p+i)!=0)
{
return 1;
break;
}
}
if(re==0)
{
return 1;
break;
}
}
}
}
else if(ans==0&&cans==0) return 1;
else return 0;
}
int main()
{
char c[50],*p=c;
int i,ans=0,num,len;
while(1)
{
gets(c);
len=strlen(c);
if(len==0) break;
else if(seek(p,0,len)==0) printf("no\n");
else if(seek(p,0,len)==1) printf("yes\n");
}
return 0;
}
29、处理字符串
#include
#include
int main()
{
char c[100],a[100],b[100];
char trans,key;
int i,j,num,t;
key=getchar();
for(i=0;i<100;i++)
{
c[i]=0;
a[i]=0;
b[i]=0;
}
gets(c);
for(i=0;i<99;i++)
{
if(c[i]>key)
{
a[j]=c[i];
j++;
}
}
for(i=0;i<99;i++)
{
if(c[i]<=key)
{
b[t]=c[i];
t++;
}
}
for(i=0;i<strlen(b);i++)
{
for(j=0;j<strlen(b)-1;j++)
{
if(b[j]>b[j+1])
{
trans=b[j];
b[j]=b[j+1];
b[j+1]=trans;
}
}
}
printf("%s%c%s",a,key,b);
}
30、输出两个带分数的差
#include
long max(long m,long n)
{
int i;
for(i=m;i>=1;i--)
{
if(m%i==0&&n%i==0)
{
return i;
break;
}
}
}
int main()
{
int num1,num2,fz1,fz2,fm1,fm2;
long anum=0,afz,afm;
int i,num;
scanf("%d[%d/%d],%d[%d/%d]",&num1,&fz1,&fm1,&num2,&fz2,&fm2);
printf("%d[%d/%d]-%d[%d/%d]=",num1,fz1,fm1,num2,fz2,fm2);
fz1=fz1+fm1*num1;
fz2=fz2+fm2*num2;
afm=fm1*fm2;
afz=fz1*fm2-fz2*fm1;
if (afz==0) printf("0");
else
{
if(afz>0) num=max(afm,afz);
else num=max(afm,-afz);
afz=afz/num;
afm=afm/num;
anum=afz/afm;
afz=afz%afm;
if(afz<0) afz*=-1;
printf("%d[%d/%d]",anum,afz,afm);
}
}
31、统计正整数的个数
#include
int main()
{
int n,num[30];
int i,j;
int trans,counts=1;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&num[i]);
}
for(i=0;i<n;i++)
{
for(j=0;j<n-1;j++)
{
if(num[j]>num[j+1])
{
trans=num[j];
num[j]=num[j+1];
num[j+1]=trans;
}
}
}
i=0;
while(i<n)
{
for(j=i;j<n;j++)
{
if(num[j]==num[j+1]) counts++;
else
{
printf("%d:%d\n",num[j],counts);
i+=counts;
counts=1;
break;
}
}
}
}
33、简单程序
#include
int main()
{
printf("C programming language is useful!\nI like it very much.");
return 0;
}
34、寻找最大整数
#include
int main()
{
int a,b,c,d,max;
scanf("%d %d %d %d",&a,&b,&c,&d);
if (a>=b) max=a;
else max=b;
if (max<=c) max=c;
if (max<=d) max=d;
printf("%d",max);
return 0;
}
32、一元稀疏多项式计算器
#include
int main()
{
int a[1000],b[1000],c[1000],rea[10],reb[10],rec[10];
int time,nowtime=0,n,m,t;
int i,j,re;
int num1,num2,flag;
scanf("%d",&time);
while(nowtime!=time)
{
scanf("%d %d %d",&m,&n,&t);
for(i=0;i<1000;i++)
{
a[i]=0;b[i]=0;c[i]=0;
}
flag=0;re=0;
for(i=0;i<2*m;i+=2)
{
scanf("%d %d",&num1,&num2);
if(num2<0)
{
re=1;
rea[-num2]=num1;
}
else a[num2]=num1;
}
for(i=0;i<2*n;i+=2)
{
scanf("%d %d",&num1,&num2);
if(num2<0)
{
re=1;
reb[-num2]=num1;
}
else b[num2]=num1;
}
if(t==1) for(i=0;i<1000;i++) c[i]=a[i]-b[i];
else for(i=0;i<1000;i++) c[i]=a[i]+b[i];
if(t==1) for(i=0;i<10;i++) rec[i]=rea[i]-reb[i];
else for(i=0;i<10;i++) rec[i]=rea[i]-reb[i];
if(re==1) for(i=0;i<10;i++)
{
if(rec[i]!=0) printf("%dx^%d",rec[i],-i);
}
for(i=0;i<300;i++)
{
if(c[i]!=0&&flag!=-1)
{
flag=i;
break;
}
}
if(flag!=0)
{
if(c[flag]!=1&&flag==1&&c[flag]!=-1) printf("%dx",c[flag]);
if(c[flag]!=1&&flag!=1&&c[flag]!=-1) printf("%dx^%d",c[flag],flag);
if(c[flag]==1&&flag!=1) printf("x^%d",flag);
if(c[flag]==1&&flag==1) printf("x");
if(c[flag]==-1&&flag!=1) printf("-x^%d",flag);
if(c[flag]==-1&&flag==1) printf("-x");
}
if(flag==0) printf("%d",c[0]);
for(i=flag+1;i<1000;i++)
{
if(c[i]!=0)
{
if(i!=1&&c[i]==1) printf("+x^%d",i);
if(i!=1&&c[i]>0&&c[i]!=1) printf("+%dx^%d",c[i],i);
if(i!=1&&c[i]<0&&c[i]!=-1) printf("%dx^%d",c[i],i);
if(i==1&&c[i]==1) printf("+x");
if(i==1&&c[i]>0&&c[i]!=1) printf("+%dx",c[i]);
if(i==1&&c[i]<0&&c[i]!=-1) printf("%dx",c[i]);
if(i==1&&c[i]==-1) printf("-x");
if(i!=1&&c[i]==-1) printf("-x^%d",i);
}
}
nowtime++;
printf("\n");
}
return 0;
}
35、字符处理
#include
int main()
{
char c;
int a;
c=getchar();
if(c>=96&&c<=122) printf("%c",c-32);
if(c>=65&&c<=90) printf("%c",c+32);
if(c<65||(c>90&&c<96)||c>122) printf("%c",c);
return 0;
}
36、成绩分级
#include
int main()
{
int score;
scanf("%d",&score);
if(score>=90) printf("A");
else if (score>=80) printf("B");
else if (score>=70) printf("C");
else if (score>=60) printf("D");
else printf("E");
}
37、abc组合
#include
int main()
{
int a,b,c,n;
scanf("%d",&n);
for(a=1;a<=9;a++)
{
for(b=0;b<=9;b++)
{
for(c=0;c<=9;c++)
{
if(n==101*(a+c)+20*b) printf("%d %d %d\n",a,b,c);
}
}
}
}
38、输出26个英文字母
#include
int main()
{
char a=97;
for(a=97;a<=122;a++)
printf("%c ",a);
printf("\n");
for(a=122;a>=97;a--)
printf("%c ",a);
}
39、数列求和
#include
float fm(int i)
{
if (i==1) return 1;
else if (i==2) return 2;
else return fm(i-1)+fm(i-2);
}
float fz(int i)
{
if(i==1) return 2;
else return fz(i-1)+fm(i-1);
}
float ai(int i)
{
return fz(i)/fm(i);
}
int main()
{
int n,i;
float ans=0;
scanf("%d",&n);
for(i=1;i<=n;i++) ans+=ai(i);
printf("%.2f",ans);
}
40、直角三角形
#include
int main()
{
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
if(a*a+b*b==c*c) printf("%d",a*b);
else if(c*c+b*b==a*a) printf("%d",c*b);
else if(a*a+c*c==b*b) printf("%d",c*a);
else printf("no");
}
41、自然数分解
#include
int main()
{
int n,i=0;
scanf("%d",&n);
while (i<n)
{
printf("%d ",n*(n-1)+1+i*2);
i+=1;
}
printf("\n");
return 0;
}
42、数字分解排序
#include
int main()
{
int num[10],a;
int i=0,j,trans;
int len=0;
scanf("%d",&a);
for(i=0;i<10;i++) num[i]=0;
i=0;
while(a>=1)
{
num[i]=a%10;
a=(a-a%10)/10;
i++;
len++;
}
for(i=0;i<10;i++)
{
for(j=0;j<9;j++)
{
if(num[j]<num[j+1])
{
trans=num[j];
num[j]=num[j+1];
num[j+1]=trans;
}
}
}
for(i=0;i<len;i++) printf("%d ",num[i]);
}
43、Fibonacci数列
#include
int f(int i)
{
if (i==0) return 7;
else if (i==1) return 11;
else return f(i-1)+f(i-2);
}
void jug(int n)
{
if(n%3==0) printf("yes\n");
else printf("no\n");
}
int main()
{
int t,a,i;
scanf("%d",&t);
for(i=1;i<=t;i++)
{
scanf("%d",&a);
jug(f(a));
}
}
44、数字处理
#include
int van(int n)
{
int ans=0;
while(n>=1)
{
ans+=n%10;
n=(n-n%10)/10;
}
if (ans>=10) return van(ans);
else printf("%d\n",ans);
}
int main()
{
int t=1;
int a;
scanf("%d",&a);
while(a!=0)
{
van(a);
scanf("%d",&a);
}
}
45、拼数字并排序
#include
#include
int isnum(char *p)
{
if(*p<='9'&&*p>='0') return 1;
else return 0;
}
int main()
{
char str[101],*p=str;
int flage,flagb;
int i,j,t,k=0,trans,ju=0;
long long num[40],sum;
gets(str);
t=0;
for(i=0;i<strlen(str);i++)
{
if(isnum(p+i)==1)
{
flagb=i;
for(j=i;j<strlen(str);j++)
{
ju=0;
if(isnum(p+j)==0)
{
flage=j-1;
ju=1;
break;
}
}
if(ju==0) flage=strlen(str)-1;
sum=0;
for(t=flagb;t<=flage;t++)
{
sum*=10;
sum+=str[t]-'0';
}
num[k]=sum;
k++;
i=flage;
}
}
for(i=0;i<k;i++)
{
for(j=0;j<=k-2;j++)
{
if(num[j]<num[j+1])
{
trans=num[j];
num[j]=num[j+1];
num[j+1]=trans;
}
}
}
for(i=0;i<k;i++) printf("%lld ",num[i]);
}
46、0-1矩阵
#include
int main()
{
int num[100][100],*p=num;
int m,n,i,j,sum=0;
int flagb,flage,max,maxb,maxe;
scanf("%d %d",&n,&m);
for(j=0;j<n;j++) for(i=0;i<m;i++) scanf("%d",&num[j][i]);
for(j=0;j<n;j++)
{
sum=0; max=0;
flagb=0; flage=0;
maxb=0; maxe=0;
for(i=0;i<m;i++) sum+=num[j][i];
if(sum==0) printf("-1 -1\n");
else
{
if(num[j][0]==1)
{
flagb=-1;
maxb=-1;
}
for(i=flagb;i<m;i++)
{
if(*(p+100*j+i)==0)
{
flage=i;
if(max<flage-flagb)
{
max=flage-flagb;
maxb=flagb;
maxe=flage;
}
flagb=flage;
}
}
if(num[j][m-1]==1)
{
flage=m;
if(flage-flagb>max)
{
maxb=flagb;
maxe=flage;
}
}
printf("%d %d\n",maxb+1,maxe-1);
}
}
}
49、A+B
#include
int main()
{
int a,b,sum;
scanf("%d %d",&a,&b);
sum=a+b;
printf("%d",sum);
return 0;
}
50、平均数
#include
int main()
{
int a;
float b,ans=0,i;
scanf("%d",&a);
for(i=1;i<=a;i++)
{
scanf("%f",&b);
ans=ans+b;
}
ans/=a;
printf("%.2f",ans);
}
51、简单计算
#include
int main()
{
int a,b,c,d;
scanf("%d %d",&a,&b);
if(a%b==0) printf("yes");
else
{
d=a%b;
c=(a-d)/b;
printf("%d %d",c,d);
}
}
52、PM2.5
#include
int main()
{
int days,i,d1=0,d2=0,d3=0,d4=0,d5=0,d6=0;
float sum=0,pm[50];
scanf("%d",&days);
for(i=0;i<days;i++)
{
scanf("%f",&pm[i]);
sum+=pm[i];
if(pm[i]<=50) d1++;
else if(pm[i]<=100) d2++;
else if(pm[i]<=150) d3++;
else if(pm[i]<=200) d4++;
else if(pm[i]<=300) d5++;
else d6++;
}
printf("%.2f\n%d %d %d %d %d %d",sum/days,d1,d2,d3,d4,d5,d6);
}
54、斐波那契数列
#include
int f(int i)
{
if(i==1) return 1;
else if(i==2) return 1;
else return f(i-1)+f(i-2);
}
void judge(int m)
{
int i,j=1,t=0;
for(i=2;i<m;i++)
{
if(m%i==0)
{
printf("%d",m);
t=1;
break;
}
}
if(t==0) printf("yes");
}
int main()
{
int a;
scanf("%d",&a);
judge(f(a));
}
64、折点计数
#include
int judge(int a,int b,int c)
{
if (a>b&&b>c) return 0;
if (a<b&&b<c) return 0;
if (a<b&&b>c) return 1;
if (a>b&&b<c) return 1;
}
int main()
{
int a[100],time,i,ans,sum=0;
scanf("%d",&time);
for(i=0;i<time;i++) scanf("%d",&a[i]);
for(i=0;i<time-2;i++) sum+=judge(a[i],a[i+1],a[i+2]);
printf("%d",sum);
}
75、选号程序
#include
int len(int a)
{
int i;
while(a>=1)
{
a=a/10;
i++;
}
return i;
}
int sum(int a)
{
int i, ans=0;
for(i=0;i<=len(a);i++)
{
ans+=a%10;
a=(a-a%10)/10;
}
return ans;
}
int main()
{
int max,times,num,i;
scanf("%d",×);
scanf("%d",&max);
for(i=0;i<=times-2;i++)
{
scanf("%d",&num);
if(sum(max)<sum(num))
max=num;
if(sum(max)==sum(num)&&max<=num)
max=num;
}
printf("%d",max);
}
85、日期计算
#include
int leap(int y)
{
if(y%4==0&&y%100!=0||y%400==0) return 1;
else return 0;
}
int main()
{
int y,d1,m,d2,d3=0,month[12]={
31,28,31,30,31,30,31,31,30,31,30,31};
scanf("%d %d",&y,&d1);
if(leap(y)==1) month[1]=29;
for(m=0;m<12;m++)
{
d3+=month[m];
if(d3>=d1)
{
printf("%d %d",m+1,month[m]+d1-d3);
break;
}
}
}
93、测试程序
#include
int main()
{
int a,s=5050;
scanf("%d",&a);
while(a>0)
{
s-=a-1;
a--;
}
printf("%d\n",s);
}
94、基本运算测试
#include
int main()
{
int a,ans;
scanf("%d",&a);
ans=(a+100)*(101-a)/2;
printf("%d",ans);
}
95、测试
#include
int main()
{
int a;
scanf("%d",&a);
printf("5");
}
98、四则运算
#include
int main()
{
int a,b,c;
char cal;
scanf("%d%c%d",&a,&cal,&b);
if(cal=='+') c=a+b;
if(cal=='-') c=a-b;
if(cal=='*') c=a*b;
if(cal=='/') c=a/b;
if(cal=='%') c=a%b;
printf("%d%c%d=%d",a,cal,b,c);
}
99、数位输出
#include
int main()
{
int a,d1,d2,d3;
scanf("%d",&a);
d1=a%10;
d2=((a-d1)/10)%10;
d3=(a-10*d2-d1)/100;
printf("%d %d %d",d3,d2,d1);
return 0;
}
110、4个整数排序
#include
int main()
{
int i,a[4],term,j;
for(i=0;i<4;i++)
{
scanf("%d",&a[i]);
}
for(j=0;j<3;j++)
{
for(i=0;i<3;i++)
{
term=0;
if(a[i]>a[i+1])
{
term=a[i];
a[i]=a[i+1];
a[i+1]=term;
}
}
}
for(i=0;i<4;i++)
{
printf("%d ",a[i]);
}
}
113、奇偶数之和
#include
int main()
{
int i,ans1=0,ans2=0;
for(i=1;i<=100;i++)
{
if(i%2==0) ans2+=i;
else ans1+=i;
}
printf("%d\n%d",ans1,ans2);
}
116、阶乘之和
#include
int f(int n)
{
int i,ans=1;
for(i=1;i<=n;i++)
{
ans*=i;
}
return ans;
}
int f1(int n)
{
int i,ans=0;
for(i=1;i<=n;i++)
{
ans+=f(i);
}
return ans;
}
int main()
{
int n;
scanf("%d",&n);
printf("%d %d %d",n,f(n),f1(n));
}
119、公式求值2
#include
#include
int main()
{
int i=1;
float an=1,sn=1;
while(an<100000)
{
i++;
an+=i;
sn+=(1/an);
}
printf("%d %.6lf %.8lf",i,sn,1/an);
}
120、阶乘运算
#include
int jc(int i)
{
if (i==1) return 1;
if (i>1) return i*jc(i-1);
}
int main()
{
int m,n;
float ans;
scanf("%d %d",&m,&n);
ans=jc(m)/jc(n)/jc(m-n);
printf("%.2f",ans);
}
121、数位数值之和
#include
int main()
{
int a,d1,d2,d3,d4;
scanf("%d",&a);
d4=a%10;a=a/10;
d3=a%10;a=a/10;
d2=a%10;a=a/10;
d1=a%10;
printf("%d %d %d %d %d",d1,d2,d3,d4,d1+d2+d3+d4);
}
122、数字个数统计2
#include
int main()
{
int a,s=0,d=0,n3=0,n5=0,n7=0,i;
scanf("%d",&a);
for(i=1;i<=a;i++)
{
if (i%2==1) s++;
if (i%2==0) d++;
if (i%3==0) n3++;
if (i%5==0) n5++;
if (i%7==0) n7++;
}
printf("%d %d %d %d %d",s,d,n3,n5,n7);
}
123、进入复赛
#include
struct info
{
int name,a,b,c,tot,min;
} ;
struct info trans;
int eva(int a,int b,int c)
{
int ans,max=a,min=mini(a,b,c);
if (max<b) max=b;if (max<c) max=c;
if(max-min>100) return 1;
else return 0;
}
int mini(int a,int b,int c)
{
int ans=a;
if (ans>b) ans=b;
if (ans>c) ans=c;
return ans;
}
int main()
{
int m;
scanf("%d",&m);
void input(struct info t[],int m);
void output(struct info t[],int m);
void sort(struct info t[],int m);
struct info t[100],*p=t;
input(p,m);
sort(p,m);
output(p,m);
return 0;
}
void input(struct info t[],int m)
{
int i;
for(i=0;i<m;i++)
{
scanf("%d %d %d %d",&t[i].name,&t[i].a,&t[i].b,&t[i].c);
if(eva(t[i].a,t[i].b,t[i].c)==0) t[i].tot=t[i].a+t[i].b+t[i].c;
else t[i].tot=0;
t[i].min=mini(t[i].a,t[i].b,t[i].c);
}
}
void sort(struct info t[],int n)
{
int i,j,k;
for(k=0;k<n-1;k++)
{
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1;j++)
{
if(t[j].tot<t[j+1].tot)
{
trans=t[j];
t[j]=t[j+1];
t[j+1]=trans;
}
}
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n-2;j++)
{
if(t[j].tot==t[j+1].tot&&t[j].min<t[j+1].min)
{
trans=t[j];
t[j]=t[j+1];
t[j+1]=trans;
}
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n-2;j++)
{
if(t[j].tot==t[j+1].tot&&t[j].min==t[j+1].min&&t[j].name>t[j+1].name)
{
trans=t[j];
t[j]=t[j+1];
t[j+1]=trans;
}
}
}
}
void output(struct info t[],int m)
{
int i,rate=1;
for(i=0;i<m;i++)
{
if(t[i].tot>=400)
{
printf("%d %d %d %d %d %d\n",rate,t[i].name,t[i].tot,t[i].a,t[i].b,t[i].c);
rate++;
}
}
}
125、成绩统计及排序
#include
void sort(int *peo[],int p)
{
int *trans,time,alltime;
for(alltime=0;alltime<p;alltime++)
{
for(time=0;time<p;time++)
{
if(peo[time]>peo[time+1])
{
trans=peo[time];
peo[time]=peo[time+1];
peo[time+1]=trans;
}
}
}
}
int main()
{
int a,b,p,*peo[200],i;
scanf("%d %d %d",&p,&a,&b);
for(i=0;i<p;i++)
{
scanf("%d",&peo[i]);
}
sort(peo[200],p);
for(i=0;i<p;i++)
{
printf("%d ",peo[i]);
}
}
128、用指针移动元素
#include
void move(int *p,int m,int n)
{
int i;
for(i=n-m;i<n;i++) printf("%d ",*(p+i));
for(i=0;i<n-m-1;i++) printf("%d ",*(p+i));
printf("%d",*(p+n-m-1));
}
int main()
{
int m,n,num[100],*p=num;
int i;
scanf("%d %d",&n,&m);
for(i=0;i<n;i++) scanf("%d",&num[i]);
move(p,m,n);
return 0;
}
130、计算组合数
#include
long long unsigned f(int m,int j)
{
int i=0;
long long unsigned ans=1;
for(i=0;i<j;i++) ans*=(m-i);
return ans;
}
long long unsigned g(int i)
{
if(i==1) return 1)O;
else return i*g(i-1);
}
int main()
{
int m,n;
long long unsigned ans,ans1,ans2;
scanf("%d %d",&m,&n);
ans1=f(n,m);
ans2=g(m);
ans=ans1/ans2;
printf("%llu",ans);
}
136、分数化小数
#include
int main()
{
double a,b;
int c;
scanf("%lf %lf %d",&a,&b,&c);
printf("%.*lf\n",c,a/b);
return 0;
}
140、矩阵相乘
#include
int main()
{
int a[2][3],b[3][2],c[2][2];
int i,j;
for(j=0;j<2;j++) for(i=0;i<3;i++) scanf("%d",&a[j][i]);
for(j=0;j<3;j++) for(i=0;i<2;i++) scanf("%d",&b[j][i]);
for(j=0;j<2;j++)
{
for(i=0;i<3;i++) printf("%5d",a[j][i]);
printf("\n");
}
for(j=0;j<3;j++)
{
for(i=0;i<2;i++) printf("%5d",b[j][i]);
printf("\n");
}
c[0][0]=a[0][0]*b[0][0]+a[0][1]*b[1][0]+a[0][2]*b[2][0];
c[1][0]=a[1][0]*b[0][0]+a[1][1]*b[1][0]+a[1][2]*b[2][0];
c[0][1]=a[0][0]*b[0][1]+a[0][1]*b[1][1]+a[0][2]*b[2][1];
c[1][1]=a[1][0]*b[0][1]+a[1][1]*b[1][1]+a[1][2]*b[2][1];
printf("%5d %5d\n",c[0][0],c[0][1]);
printf("%5d %5d",c[1][0],c[1][1]);
}
142、转换排序
#include
int main()
{
char str[80],trans;
int i,j,k,q,ans;
gets(str);
for(i=0;i<80;i++)
{
if(str[i]>='a'&&str[i]<='z') str[i]-=32;
}
for(i=0;i<80;i++)
{
for(j=0;j<80;j++)
{
if (str[j]>='A'&&str[j]<='Z')
{
for(q=j;q<80;q++)
{
if (str[q]<=str[j]&&str[q]>='A')
{
trans=str[q];
str[q]=str[j];
str[j]=trans;
}
}
}
}
}
printf("%s",str);
return 0;
}
143、最值位置
#include
int main()
{
int num[80],*p=num;
int i,j,time,max,add=0;
scanf("%d ",&time);
for(i=0;i<time;i++) scanf("%d",&num[i]);
max=num[0];
for(i=0;i<time;i++)
{
if(*(p+i)>max)
{
add=i;
max=*p+i;
}
}
printf("%d %d %d",time,max,add);
return 0;
}
144、构造表达式
#include
int main()
{
int a,b,ans;
char c;
scanf("%d %d %c",&a,&b,&c);
if(c=='+') ans=a+b;
if(c=='-') ans=a-b;
if(c=='/') ans=a/b;
if(c=='%') ans=a%b;
if(c=='*') ans=a*b;
printf("%d%c%d=%d",a,c,b,ans);
}
145、单词统计
#include
#include
int main()
{
char m[100],word[9];
int i,j,ans,counts=0,flag;
gets(m);
gets(word);
for(i=0;i<strlen(m);i++)
{
for(j=i;j<strlen(m);j++)
{
if(m[j]==' ')
{
flag=j;
break;
}
if(flag<j) flag=strlen(m);
}
ans=1;
for(j=i;j<flag;j++)
{
if(m[j]!=word[j-i])
{
ans=0;
break;
}
}
if(strlen(word)!=flag-i) ans=0;
if(ans==1) counts++;
i=flag;
}
printf("%s %d",word,counts);
return 0;
}
146、金字塔打印
#include
void draw(char c,int n)
{
int line=2*n-1;
int i,j;
for(i=1;i<=n;i++)
{
for(j=0;j<line-i;j++) printf(" ");
for(j=0;j<i;j++)
{
printf("%c ",c);
}
for(j=0;j<line-i-1;j++) printf(" ");
printf("\n");
}
}
int main()
{
char c;
int n;
scanf("%c %d",&c,&n);
draw(c,n);
return 0;
}
147、字符删除
#include
#include
void dele(char*p,char ch,int len)
{
int i,j;
char trans;
for(i=0;i<=len;i++)
{
if(*(p+i)==ch)
{
for(j=i;j<len;j++) *(p+j)=*(p+j+1);
*(p+len)='\0';
len--;
}
}
for(i=0;i<=len;i++)
{
if(*(p+i)==ch)
{
for(j=i;j<len;j++) *(p+j)=*(p+j+1);
*(p+len)='\0';
len--;
}
}
puts(p);
}
int main()
{
char str[50],ch,*p=str;
gets(str);
scanf("%c",&ch);
dele(p,ch,strlen(str));
}
148、开灯问题
#include
int main()
{
int ln,pn,time,lan[100],peo;
scanf("%d %d",&ln,&pn);
for(time=0;time<ln;time++)
{
lan[time]=1;
}
for(time=0;time<ln;time++)
{
for(peo=2;peo<=pn;peo++)
{
if((time+1)%peo==0) lan[time]=-lan[time];
}
}
for(time=0;time<ln;time++)
{
if(lan[time]==1) printf("%d ",time+1);
}
}
151、单词排序
#include
#include
int main()
{
char str[10][20],*p=str,trans[20];
int n,i,j,t;
scanf("%d",&n);
for(i=0;i<n;i++) scanf("%s",str[i]);
for(i=0;i<n;i++)
{
for(j=0;j<n-1;j++)
{
if(strcmp(str[j],str[j+1])>0)
{
for(t=0;t<20;t++) trans[t]=str[j][t];
for(t=0;t<20;t++) str[j][t]=str[j+1][t];
for(t=0;t<20;t++) str[j+1][t]=trans[t];
}
}
}
for(i=0;i<n;i++)
{
puts(str[i]);
printf("\n");
}
}
155、成绩处理
#include
void well(float *p)
{
int i,j;
int ans=0;
int avernum=0,weltem=0;
for(i=0;i<5;i++)
{
avernum=0;
weltem=0;
for(j=0;j<4;j++)
{
avernum+=*(p+j+4*i);
if(*(p+j+4*i)>=85) weltem++;
}
if(avernum/4>=90||weltem==4) ans++;
}
printf("%d ",ans);
}
void aver(float *p)
{
int i;
float ans=0;
for(i=0;i<5;i++) ans+=*(p+i*4);
printf("%.1f ",ans/5);
}
void fal(float *p)
{
int i,j,ans=0,faltem=0;
for(i=0;i<5;i++)
{
faltem=0;
for(j=0;j<4;j++) if(*(p+j+4*i)<60) faltem++;
if(faltem>=2) ans++;
}
printf("%d ",ans);
}
int main()
{
float stu[5][4];
int i,j;
for(i=0;i<5;i++) for(j=0;j<4;j++) scanf("%f",&stu[i][j]);
aver(stu);
fal(stu);
well(stu);
}
152、奇偶排序
#include
int main()
{
int a[20],num,time,trans,numN;
scanf("%d",&time);
for(num=0;num<time;num++)
{
scanf("%d",&a[num]);
}
for(num=0;num<time-1;num++)
{
for(numN=0;numN<time-1;numN++)
{
if(a[numN]>a[numN+1])
{
trans=a[numN];
a[numN]=a[numN+1];
a[numN+1]=trans;
}
}
}
for(num=0;num<time;num++)
{
if(a[num]%2==1) printf("%d ",a[num]);
}
printf(" ");
for(num=0;num<time;num++)
{
if(a[num]%2==0) printf("%d ",a[num]);
}
}
156、大数相加
#include
#include
int main()
{
int i,j,lena,lenb,delta,max,num;
char a[30],b[30],c[50],ans[50],*p;
for(i=0;i<200;i++) c[i]='\0';
scanf("%d %d",&lena,&lenb);
scanf("%s",&a);
scanf("%s",&b);
delta=lena-lenb;
max=strlen(a);
if(delta<0)
{
delta=-delta;
max=strlen(b);
}
for(i=0;i<delta;i++) c[i]='0';
if(lena>lenb) strcat(c,b);
if(lena<lenb) strcat(c,a);
if(lena>lenb&&delta!=0)
{
for(i=0;c[i];i++) ans[i]=a[i]+c[i]-'0';
num=strlen(a);
}
if(lena<lenb&&delta!=0)
{
for(i=0;c[i];i++) ans[i]=b[i]+c[i]-'0';
num=strlen(b);
}
if(delta==0)
{
for(i=0;a[i];i++) ans[i]=a[i]+b[i]-'0';
num=strlen(a);
}
while(num>0)
{
if(ans[num]>'9'&&num!=0)
{
ans[num]-=10;
ans[num-1]++;
}
if(ans[0]>'9')
{
ans[0]-=10;
printf("1");
}
num--;
}
for(i=0;ans[i];i++) printf("%c",ans[i]);
}
157、元素放置
#include
void sort(int *p,int m,int n)
{
int i,j,trans;
for(i=0;i<m*n;i++)
{
for(j=0;j<m*n-1;j++)
{
if(*(p+j)>*(p+j+1))
{
trans=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=trans;
}
}
}
}
void output(int *p,int m,int n)
{
int i=1,j,line=1;
while(line!=n)
{
if(line%2==1)for(i=line*m-1;i>=(line-1)*m;i--) printf("%3d",*(p+i));
if(line%2==0)for(i=(line-1)*m;i<=line*m-1;i++) printf("%3d",*(p+i));
line++;
printf("\n");
}
if(line%2==1)for(i=line*m-1;i>=(line-1)*m;i--) printf("%3d",*(p+i));
if(line%2==0)for(i=(line-1)*m;i<=line*m-1;i++) printf("%3d",*(p+i));
}
int main()
{
int num[50],*p=num;
int m,n;
int i,len;
scanf("%d %d",&m,&n);
len=m*n;
for(i=0;i<len;i++) scanf("%d",&num[i]);
sort(p,m,n);
output(p,n,m);
return 0;
}
158、字符统计
#include
#include
void execute(char *p,int len)
{
int i;
int ans1=0,ans2=0,ans3=0,ans4=0,ans5=0;
for(i=0;i<=len;i++)
{
if(*(p+i)>='A'&&*(p+i)<='Z') ans1++;
else if(*(p+i)>='a'&&*(p+i)<='z') ans2++;
else if(*(p+i)==' ') ans3++;
else if(*(p+i)>='0'&&*(p+i)<='9') ans4++;
else ans5++;
}
printf("%d %d %d %d %d",ans1,ans2,ans3,ans4,ans5-1);
}
int main()
{
char str[100],*p=str;
gets(str);
execute(p,strlen(str));
}