do{scanf("%d",&a[index++]);printf("%d ",a[index-1]);}while((ch=getchar())!=' '&&ch!=EOF);//每行不确定有几个输入时
1、球的体积
#include <stdio.h> int main() { double PI=3.1415927,r; while(scanf("%lf", &r) != EOF) { double result=(double)4/(double)3*PI*r*r*r; printf("%.3f ",result); } return 0; }
2、两点间的距离
#include <stdio.h> #include <math.h> int main() { double x1,y1,x2,y2; while(scanf("%lf%lf%lf%lf", &x1,&y1,&x2,&y2) != EOF) { double result= sqrt(pow(x1-x2,2)+pow(y1-y2,2)); printf("%.2f",result); } return 0; }
3、大小写转换
#include <stdio.h> int main() { char ch; scanf("%c",&ch); printf("%c ",ch+32); return 0; }
4、温度转换
#include <stdio.h> int main() { double c,result; while(scanf("%lf",&c)!=EOF) { result=(double)9/(double)5*c+(double)32; printf("%.2f",result); printf("0000 "); } return 0; }
5、判断奇偶
#include <stdio.h> int main() { int n; while(~scanf("%d",&n)) { printf("%d ",n); if(n%2==0) printf("is even "); else printf("is odd "); } return 0; }
6、逆序输出1到4位的正整数
#include <stdio.h> int main() { int n,temp; while(~scanf("%d",&n)) { if(n<=0||n/10000>=1)printf("error! "); else { while(n) { temp=n%10; printf("%d",temp); n=n/10; } printf(" "); } } return 0; }
7、简单加减乘除
#include <stdio.h> int main() { double a,b; int action; while(~scanf("%lf%lf%d",&a,&b,&action)) { switch(action) { case 1:printf("%.2f ",a+b);break; case 2:printf("%.2f ",a-b);break; case 3:printf("%.2f ",a*b);break; case 4:if(b!=0)printf("%.2f ",a/b);else printf("error! ");break; } } return 0; }
8、字母的前驱或后继
#include <stdio.h> int main() { char ch; scanf("%c",&ch); if(ch>='a'&&ch<='a'+12) printf("%c ",ch+1); else printf("%c ",ch-1); return 0; }
9、门票价格计算
#include <stdio.h> int main() { int n; while(~scanf("%d",&n)) { if(n<0||n>1000)printf("error! "); else { if(n>120) printf("%.2f ",n*5*0.7); else if(n>80)printf("%.2f ",n*5*0.8); else if(n>40) printf("%.2f ",n*5*0.85); else if(n>20) printf("%.2f ",n*5*0.9); else printf("%.2f ",(float)n*(float)5); } } return 0; }
10、星期几问题
#include <stdio.h> int main() { int n; while(~scanf("%d",&n)) { switch(n) { case 0:printf("Sunday ");break; case 1:printf("Monday ");break; case 2:printf("Tuesday ");break; case 3:printf("Wednesday ");break; case 4:printf("Thursday ");break; case 5:printf("Friday ");break; case 6:printf("Saturday ");break; } } return 0; }
11、时间相加
#include <stdio.h> int main() { int a1,a2,a3,b1,b2,b3; while(~scanf("%d%d%d%d%d%d",&a1,&a2,&a3,&b1,&b2,&b3)) { int sf=0,mf=0; a3+=b3; if(a3>=60){a3-=60;sf=1;} a2=a2+b2+sf; if(a2>=60){a2-=60;mf=1;} a1=a1+b1+mf; printf("%d %d %d ",a1,a2,a3); } return 0; }
12、成绩转换
#include <stdio.h> int main() { int n; while(~scanf("%d",&n)) { if(n<0||n>100)printf("Score is error! "); else { if(n>=90)printf("A "); else if(n>=80)printf("B "); else if(n>=70)printf("C "); else if(n>=60)printf("D "); else printf("E "); } } return 0; }
13、A+B
#include <stdio.h> int main() { int n; while(~scanf("%d",&n)) { int a,b; for(int i=0;i<n;i++) { scanf("%d%d",&a,&b); printf("%d ",a+b); } } return 0; }
14、字母的前序或后继
#include <stdio.h> int main() { char ch; while(~scanf("%c",&ch)) { if(!(ch>='a'&&ch<='z'))continue; if(ch>='a'&&ch<='a'+12) printf("%c ",ch+1); else printf("%c ",ch-1); } return 0; }
15、幼儿园分班问题
#include <stdio.h> int main() { int n; while(~scanf("%d",&n)) { if(n<2||n>6)printf("No. "); else if(n>=5) printf("Three. "); else if(n>=4) printf("Two. "); else printf("One. "); } return 0; }
16、门票价格计算(同9)
17、折纸问题
#include <stdio.h> int main() { int n; while(~scanf("%d",&n)) { n*=100; int i=1,count=0; while(i<=n) { i*=2; count++; } printf("%d ",count); } return 0; }
18、数字之和
#include <stdio.h> int main() { int n; while(~scanf("%d",&n)) { int sum=0; while(n) { sum+=n%10; n/=10; } printf("%d ",sum); } return 0; }
19、约数之和
#include <stdio.h> int main() { int n; while(~scanf("%d",&n)) { int sum=0; for(int i=1;i<=n;i++) if(n%i==0)sum+=i; printf("%d ",sum); } return 0; }
20、求最高 最低平均分
#include <stdio.h> int main() { int n; while(~scanf("%d",&n)) { int min=100,max=0,sum=0; int num; for(int i=0;i<n;i++) { scanf("%d",&num); min=min>num?num:min; max=max>num?max:num; sum+=num; } printf("%d %d %d ",max,min,sum/n); } return 0; }
21、计算e
#include <stdio.h> __int64 fun(__int64 i) { if(i==1)return (__int64)1; else return (__int64)i*fun(i-1); } int main() { double th; while(~scanf("%lf",&th)) { if(th>1) { printf("0.000000 0 "); continue; } double result=1,cur=1; int count=1; while(cur>=th) { result+=cur; count++; cur=1.0/fun(count); } printf("%.6f %d ",result,count); } return 0;
22、工业产值翻倍
#include <stdio.h> int main() { int n; while(~scanf("%d",&n)) { double cur=100; int count=0; while(cur<200) { cur+=cur*n/(double)100; count++; } printf("%d ",count); } return 0; }
23 、SUM
#include <stdio.h> int main() { int n,num,sum,val; while(~scanf("%d",&n)) { while(n--) { scanf("%d",&num); sum=0; for(int i=0;i<num;i++) { scanf("%d",&val); sum+=val; } printf("%d ",sum); } } return 0; }
24、求素数
#include <stdio.h> #include <math.h> int main() { int n; while(~scanf("%d",&n)) { int num,flag; while(n--) { scanf("%d",&num); flag=0; for(int i=2;i<sqrt(num);i++) { if(num%i==0){flag=1;break;} } if(flag) printf("no "); else printf("yes "); } } return 0; }
25、求最大公约数
#include <stdio.h> int main() { //辗转相除可求最小公倍数 //ab的最小公倍数为min //最大公约数为max //a*b=min*max int n; while(~scanf("%d",&n)) { int a,b,min,max,sum,temp; while(n--) { scanf("%d%d",&a,&b); sum=a*b;//下面会改变ab的值 if(a<b) {temp=a;a=b;b=temp;} while(1) { temp=a%b; if(!temp)break; a=b; b=temp; } max=b; min=sum/max; printf("%d ",min); } } return 0; }
26、平方和 和 立方和
#include <stdio.h> #include <math.h> int main() { int n; while(~scanf("%d",&n)) { int a,b,flag,temp; double sum1,sum2; while(n--) { sum1=0,sum2=0; scanf("%d%d",&a,&b); if(a>b){temp=a;a=b;b=temp;} flag=a%2; for(int i=a;i<=b;i+=2) { if(flag)//第一个是奇数 { sum2+=pow(i,3); if(i+1<=b)sum1+=pow(i+1,2); } else//第一个是偶数 { sum1+=pow(i,2); if(i+1<=b)sum2+=pow(i+1,3); } } printf("%.0lf %.0lf ",sum1,sum2); } } return 0; }
27、统计整数
#include <stdio.h> int main() { int a[20],count,sum; sum=0,count=0; for(int i=0;i<20;i++) { scanf("%d",&a[i]); if(a[i]<0)count++; sum+=a[i]; } printf("%d %.1f ",count,(double)sum/(double)20); return 0; }
28、等差数列
#include <stdio.h> int main() { int n,result; while(~scanf("%d",&n)) { result=n*(4+3*(n-1))/2; printf("%d ",result); } return 0; }
29、求最晚和最早日期
#include <stdio.h> int main() { int n; while(~scanf("%d",&n)) { int a,b,c; int max_a=1,max_b=1,max_c=1; int min_a=2015,min_b=12,min_c=31; while(n--) { scanf("%d%d%d",&a,&b,&c); if(a>max_a||(a==max_a&&b>max_b)||(a==max_a&&b==max_b&&c>max_c)) { max_a=a; max_b=b; max_c=c; } if(a<min_a||(a==min_a&&b<min_b)||(a==min_a&&b==min_b&&c<min_c)) { min_a=a; min_b=b; min_c=c; } } printf("%d %d %d ",max_a,max_b,max_c); printf("%d %d %d ",min_a,min_b,min_c); } return 0; }
30、蟠桃记
#include <stdio.h> int main() { //动态规划 //第n天吃了1个 总数1 1+n+1=2n //第n-1天吃了3个 总数4 4+n+1=2n //第n-2天吃了6个 总数10 10+n+1=2n __int64 dp[30]; dp[1]=1; for(int i=2;i<30;i++) { dp[i]=(dp[i-1]+1)*2; } int n; while(~scanf("%d",&n)) { printf("%I64d ",dp[n]); } return 0; }
31、素数之和(2153未通过 检查不出来错误)
#include <stdio.h> #include <math.h> #include <stdbool.h> bool isPrimeNumber(int n) { for(int i=2;i<=sqrt(n);i++) if(n%i==0)return false; return true; } int main() { int n; while(~scanf("%d",&n)) { int sum,num; for(int i=0;i<n;i++) { sum=0; scanf("%d",&num); for(int i=2;i<=num;i++) { if(isPrimeNumber(i))sum+=i; } printf("%d ",sum); } if(n==32)break;//2153 有34条数据 这个输入错了 } return 0; }
32、完数
#include <stdio.h> int main() { int n; while(~scanf("%d",&n)) { int temp,a,b,sum,index,count; while(n--) { count=0; scanf("%d%d",&a,&b); if(a>b){temp=a;a=b;b=temp;} for(int i=a;i<=b;i++) { sum=1; for(int j=2;j<i;j++) { if(i%j==0)sum+=j; } if(sum==i)count++; } printf("%d ",count); } } return 0; }
33、九九乘法表
#include <stdio.h> int main() { int num,val; while(~scanf("%d",&num)) { for(int i=1;i<=num;i++) { for(int j=1;j<=num;j++) { val=i*j; if(val<10) printf(" %d",i*j); else printf(" %d",i*j); } printf(" "); } printf(" "); for(int c=1;c<=num;c++) { for(int d=1;d<=num;d++) { if(c>=d) { val=c*d; if(val<10) printf(" %d",val); else printf(" %d",val); } } printf(" "); } printf(" "); for(int a=1;a<=num;a++) { for(int b=1;b<=num;b++) { if(a<=b) { val=a*b; if(val<10) printf(" %d",val); else printf(" %d",val); } else printf(" "); } printf(" "); } } return 0; }
34、放大的X
#include <stdio.h> int main() { int num,n,flag; while(~scanf("%d",&num)) { while(num--) { scanf("%d",&n); for(int i=1;i<=n;i++) { flag=0; for(int j=1;j<=n;j++) { if(j==i||j==n-i+1){printf("X");flag++;} else printf(" "); if(flag==2||(flag==1&&n%2==1&&2*i-1==n))break; } printf(" "); } printf(" "); } } return 0; }
35、空心三角形
#include <stdio.h> int main() { int num,n,ch,flag; scanf("%d",&num); while(num--) { getchar(); scanf("%c%d",&ch,&n); for(int i=1;i<=n;i++) { flag=0; for(int j=1;j<=2*n-1;j++) { if(i==1&&j<n)printf(" "); else if(i==1&&j==n){printf("%c",ch);break;} else if(i==n)printf("%c",ch); else if(j==n-i+1||j==n+i-1){printf("%c",ch);flag++;if(flag==2)break;} else printf(" "); } printf(" "); } printf(" "); } return 0; }
36、水果价格(C++通过)
#include <stdio.h> #include <iostream> using namespace std; void my_print(double *p) { double price[4]={1.5,1.4,1.48,1.08}; printf(" apple orange banana pineapple sum "); printf("price "); int i; double temp,sum=0; for(i=0;i<4;i++) { temp=p[i]*price[i]; sum+=temp; if(temp>=10)printf("%.2f ",temp); else printf("%.2f ",temp); if(i==3)printf(" ");//若是pineapple 多加三个空格 } if(sum>=10)printf("%.2f ",sum); else printf("%.2f ",sum); printf("weight "); sum=0; for(i=0;i<4;i++) { sum+=p[i]; if(p[i]>=10)printf("%.2f ",p[i]); else printf("%.2f ",p[i]); if(i==3)printf(" ");//若是pineapple 多加三个空格 } if(sum>=10)printf("%.2f ",sum); else printf("%.2f ",sum); } int main() { int n; char d; double p[4],g; while(~scanf("%d",&n)) { for(int i=0;i<4;i++)p[i]=0; while(n--) { cin>>d>>g;//scanf不会写 switch(d) { case 'a':p[0]+=g;break; case 'o':p[1]+=g;break; case 'b':p[2]+=g;break; case 'p':p[3]+=g;break; } } my_print(p); printf(" "); } return 0; }
#include <stdio.h> int main() { int N,i; char d ; double g,price_sum,weight_sum; while (~scanf ("%d",&N)) { double a_sum=0.0,o_sum=0.0,b_sum=0.0,p_sum=0.0 ; for (i=0 ;i<N ;i++ ) { getchar (); scanf ("%c %lf",&d,&g) ; if (d=='a') a_sum = a_sum+g ; if (d=='o') o_sum = o_sum+g ; if (d=='b') b_sum = b_sum+g ; if (d=='p') p_sum = p_sum+g ; } price_sum = a_sum*1.5+o_sum*1.4+b_sum*1.48+p_sum*1.08 ; weight_sum = a_sum+o_sum+b_sum+p_sum ; printf (" apple orange banana pineapple sum "); printf ("price %-7.2f%-7.2f%-7.2f%-10.2f%-7.2f ",a_sum*1.5,o_sum*1.4,b_sum*1.48,p_sum*1.08,price_sum) ;//-代表左对齐 printf ("weight %-7.2f%-7.2f%-7.2f%-10.2f%-7.2f ",a_sum,o_sum,b_sum,p_sum,weight_sum) ;//不带-右对齐 printf (" ") ; } return 0 }
37、奇数的乘积
#include <stdio.h> int main() { int n,num,result; while(~scanf("%d",&n)) { result=1; while(n--) { scanf("%d",&num); if(num%2==1)result*=num; } printf("%d",result); } return 0; }
38、素数表
#include <stdio.h> #include <math.h> #include <stdbool.h> bool isPrimeNumber(int n) { if(n==1)return false; for(int i=2;i<=sqrt(n);i++) if(n%i==0)return false; return true; } int main() { int a,b,temp,count; while(~scanf("%d%d",&a,&b)) { count=0; if(a>b){temp=a;a=b;b=temp;} for(int i=a;i<=b;i++) { if(isPrimeNumber(i)) { count++; printf("%d ",i); if(count%10==0)printf(" "); } } } return 0; }
39、亲数和
#include <stdio.h> int main() { int num,a,b,sum1,sum2; while(~scanf("%d",&num)) { while(num--) { scanf("%d%d",&a,&b); sum1=0;sum2=0; for(int i=1;i<a;i++) if(a%i==0)sum1+=i; for(int j=1;j<b;j++) if(b%j==0)sum2+=j; if(a==sum2&&b==sum1)printf("YES "); else printf("NO "); } } return 0; }
40、分拆素数和
#include <stdio.h> #include <math.h> #include <stdbool.h> bool isPrimeNumber(int n) { if(n==1)return false; for(int i=2;i<=sqrt(n);i++) if(n%i==0)return false; return true; } int findMaxPrimeNumber(int n,int* a) { for(int i=0;i<1229;i++) if(a[i]>n) return i; } int main() { int cur=0; int pr[1228]={0}; for(int i=2;i<10000;i++) { if(isPrimeNumber(i)) pr[cur++]=i; } int num,n; while(~scanf("%d",&num)) { while(num--) { scanf("%d",&n); int max_ind=findMaxPrimeNumber(n,&pr[0]); int count=0; for(int i=0;i<max_ind;i++) { if(i>n/2)break; for(int j=i+1;j<max_ind;j++) { if(pr[i]+pr[j]>n)break; if(pr[i]+pr[j]==n) count++; } } printf("%d ",count); } } return 0; }
41、求斐波拉切数列
#include <stdio.h> int main() { int dp[20]={0}; dp[0]=1; dp[1]=1; for(int i=2;i<20;i++) dp[i]=dp[i-1]+dp[i-2]; int n; while(~scanf("%d",&n)) { printf("%d ",dp[n-1]); } return 0; }
42、统计分数
#include <stdio.h> int main() { int n,count; double num; while(~scanf("%d",&n)) { if(n==0){printf("0");continue;} count=0; while(n--) { scanf("%lf",&num); if(num<60)count++; } printf("%d ",count); } return 0; }
43、平均值问题
#include <stdio.h> int main() { int n,count; double num,sum,dp[80]; while(~scanf("%d",&n)) { count=0,sum=0; for(int i=0;i<n;i++) { scanf("%lf",&num); dp[i]=num; sum+=num; } sum=sum/(double)n; for(int i=0;i<n;i++) if(dp[i]>=sum)count++; printf("%.6f %d ",sum,count); } return 0; }
44、统计高于平均分人数
1 #include <stdio.h> 2 int main() 3 { 4 int index=0,count=0; 5 double num,sum=0,dp[40]={0}; 6 while(1) 7 { 8 scanf("%lf",&num); 9 if(num<0)break; 10 dp[index++]=num; 11 sum+=num; 12 } 13 sum=sum/(double)index; 14 for(int i=0;i<index;i++) 15 if(dp[i]>sum)count++; 16 printf("%d ",count); 17 return 0; 18 }
45、调换数组
#include <stdio.h> int main() { int min_index,max_index,n,num,dp[40],temp; while(~scanf("%d",&n)) { scanf("%d",&num); dp[0]=num; min_index=0,max_index=0; for(int i=1;i<n;i++) { scanf("%d",&num); dp[i]=num; if(dp[min_index]>num)min_index=i; if(dp[max_index]<num)max_index=i; } temp=dp[min_index]; dp[min_index]=dp[max_index]; dp[max_index]=temp; for(int j=0;j<n-1;j++) printf("%d ",dp[j]); printf("%d ",dp[n-1]); } return 0; }
46、排序问题
#include <stdio.h> void sort(int a[],int n) { int flag,temp; for(int i=0;i<n-1;i++) { flag=0; for(int j=0;j<n-1;j++) { if(a[j]<a[j+1])//最小的上浮 { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; flag=1; } } if(flag==0)break; } } int main() { int min_index,max_index,n,num,dp[80],temp; while(~scanf("%d",&n)) { for(int i=0;i<n;i++) { scanf("%d",&num); dp[i]=num; } sort(dp,n); for(int j=0;j<n;j++) printf("%d ",dp[j]); printf(" "); } printf(" "); return 0; }
47、奇偶间谍
#include <stdio.h> int isSpy(int a,int b,int c) { int x=a%2,y=b%2,z=c%2; if(x==y&&x==z)return -1; if(x==y&&x!=z)return 0; if(x==z&&x!=y)return 1; if(y==z&&x!=y)return 2; } int main() { int dp[10]; int i,index; while(~scanf("%d%d%d%d%d%d%d%d%d%d",&dp[0],&dp[1],&dp[2],&dp[3],&dp[4],&dp[5],&dp[6],&dp[7],&dp[8],&dp[9])) { for(i=2;i<10;i++) { index=isSpy(dp[i-2],dp[i-1],dp[i]); if(index!=-1) { printf("%d ",dp[i-index]); break; } } } return 0; }
48、求质数
#include <stdio.h> #include <math.h> #include <stdbool.h> bool isPrimeNumber(int n) { if(n==1)return false; for(int i=2;i<=sqrt(n);i++) if(n%i==0)return false; return true; } int main() { int a,b,temp,count; while(~scanf("%d%d",&a,&b)) { count=0; if(a>b){temp=a;a=b;b=temp;} for(int i=a;i<=b;i++) { if(isPrimeNumber(i)) count++; } printf("%d ",count); } return 0; }
49、卖鸭子
#include <stdio.h> int main() { // 卖出 剩余 总数 //7 4 2 (2+1)*2=6 //6 14-6=8 6 (6+1)*2=14 int dp[8],n; dp[7]=2; for(int i=6;i>0;i--) { dp[i]=2*(dp[i+1]+1); } while(~scanf("%d",&n)) { printf("%d %d ",2*(dp[n]+1)-dp[n],dp[n]); } return 0; }
50、十进制转二进制
#include <stdio.h> int main() { int a[10],n,count; while(~scanf("%d",&n)) { if(n==0){printf("0 ");continue;} count=0; while(n) { a[count++]=n%2; n/=2; } for(int i=count-1;i>=0;i--) printf("%d",a[i]); printf(" "); } return 0; }
51、开关灯
#include <stdio.h> int main() { int n; while(~scanf("%d",&n)) { int a[21]={0}; if(n==1){printf("0 ");continue;} for(int i=2;i<=n;i++) for(int j=1;j<=20;j++) if(j%i==0) a[j]=(a[j]==0?1:0); for(int k=1;k<=n;k++) printf("%d",a[k]); printf(" "); } return 0; }
52、回文平方数
#include <stdio.h> //进制转换 取余倒序 5%2=1 5/2=2; 2%2=0 2/2=1 ;1%2=1 1/2=0; 5=101 char number[21]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K'}; int D2R(int num,int r,char *ch)//将十进制数num转为r进制数 返回的size为所求数的第一位的位置(倒序) { int mod_num,i=0,flag=0; if(num<0){num=-num;flag=1;} if(num==0){ch[i++]='0';} while(num) { mod_num=num%r; ch[i++]=number[mod_num]; num/=r; } if(flag)ch[i++]='-'; return i-1; } void printD2R(char *ch,int size) { for(int j=size;j>=0;j--) { printf("%c",ch[j]); } } int isAnswer(char* ch,int size) { int i=0,j=size,flag=1; while(!(i-1==j)&&!(i==j)) { if(ch[i]!=ch[j]){flag=0;break;} i++,j--; } return flag; } int main() { int r,size,i,j,size2; char ch[1000],ch2[1000]; scanf("%d",&r); __int64 num; for(i=1;i<=300;i++) { num=(__int64)i*(__int64)i; size=D2R(num,r,ch); if(isAnswer(ch,size)) { size2=D2R(i,r,ch2); printD2R(ch2,size2); printf(" "); printD2R(ch,size); printf(" "); } } return 0; }
53、进制转换
#include <stdio.h> //进制转换 取余倒序 5%2=1 5/2=2; 2%2=0 2/2=1 ;1%2=1 1/2=0; 5=101 char number[21]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K'}; int D2R(int num,int r,char *ch)//将十进制数num转为r进制数 返回的size为所求数的第一位的位置(倒序) { int mod_num,i=0,flag=0; if(num<0){num=-num;flag=1;} if(num==0){ch[i++]='0';} while(num) { mod_num=num%r; ch[i++]=number[mod_num]; num/=r; } if(flag)ch[i++]='-'; return i-1; } int main() { char ch[100]; int n,i,num,r,size; while(~scanf("%d",&n)) { while(n--) { scanf("%d%d",&num,&r); size=D2R(num,r,ch); for(i=size;i>=0;i--) { printf("%c",ch[i]); } printf(" "); } } return 0; }
54、删除数组元素
#include <stdio.h> //双指针法 删除指定元素 void delf(int a[],int* n,int del) { int i=0,count=0; while(i<*n) { if(a[i]==del)i++; else a[count++]=a[i++]; } *n=count; } int main() { int n,del,a[100]; while(~scanf("%d",&n)) { for(int i=0;i<n;i++) scanf("%d",&a[i]); scanf("%d",&del); delf(a,&n,del); if(n==0){printf("Empty array! ");continue;} for(int i=0;i<n-1;i++) printf("%d ",a[i]); printf("%d ",a[n-1]); } return 0; }
55、删除数组重复元素
#include <stdio.h> //遍历两遍 k是删除完之后的数组大小 int delf(int a[],int n) { int i,j,k=0; for(i=0;i<n;i++) { for(j=i+1;j<n&&a[j]-a[i];j++);//检查第i项之后是否有值等于a[i] if(j==n)a[k++]=a[i];//若后方没有与a[i]相同的 放入数组中 } return k; } int main() { int n,del,a[100]; while(~scanf("%d",&n)) { for(int i=0;i<n;i++) scanf("%d",&a[i]); n=delf(a,n); for( i=0;i<n-1;i++) printf("%d ",a[i]); printf("%d ",a[n-1]); } return 0; }
56、循环数组
1 #include <stdio.h> 2 //数组右移k位相当于翻转前1~n-k;再翻转n-k~n;再翻转1~n 3 void Reverse(int* a,int p,int q) 4 { 5 int temp; 6 while(!(p==q)&&!(q+1==p)) 7 { 8 temp=a[p]; 9 a[p]=a[q]; 10 a[q]=temp; 11 p++,q--; 12 } 13 } 14 void my_print(int* a,int n) 15 { 16 for(int i=0;i<n-1;i++) 17 printf("%d ",a[i]); 18 printf("%d ",a[n-1]); 19 } 20 void RightShift(int* a,int k,int n) 21 { 22 Reverse(a,0,n-k-1); 23 Reverse(a,n-k,n-1); 24 Reverse(a,0,n-1); 25 } 26 int main() 27 { 28 int n,k,a[100]; 29 while(~scanf("%d",&n)) 30 { 31 for(int i=0;i<n;i++) 32 scanf("%d",&a[i]); 33 scanf("%d",&k); 34 RightShift(a,k%n,n);//注意 k%n 35 my_print(a,n); 36 } 37 return 0; 38 }
57、菲波那切数列部分和
#include <stdio.h> int fib(int n) { if(n==1||n==2) return 1; else return fib(n-1)+fib(n-2); } int main() { int a,b; while(~scanf("%d%d",&a,&b)) { int sum=0; int i=1,cur; while(1) { cur=fib(i++); if(cur>=a&&cur<=b)sum+=cur; if(cur>b)break; } printf("%d ",sum); } return 0; }
58、杨辉三角
#include <stdio.h> __int64 fun(__int64 n,__int64 k)//从n开始阶乘k项 { if(k>0) return n*fun(n-1,k-1); else return 1; } __int64 Select(__int64 n,__int64 k)//C k n 选择 { if(k==0||n==0)return 1; if(k>n-k)return Select(n,n-k); else return fun(n,k)/fun(k,k); } int main() { int n,num; while(~scanf("%d",&n)) { while(n--) { scanf("%d",&num); for(int i=0;i<num;i++) { for(int j=0;j<i;j++) printf("%I64d ",Select(i,j)); printf("1 "); } printf(" "); } } return 0; }
59、数字金字塔
#include <stdio.h> #include <malloc.h> void my_print(int** a,int n) { for(int i=0;i<n;i++) { for(int j=0;j<i+1;j++) { printf("%d ",a[i][j]); } printf(" "); } } //动态规划 子问题为高为2的金字塔 void fun(int** a,int n) { if(n==1) return; int i=n-2,j,down,right; for(j=0;j<n-1;j++)//求第n-1行 高为2的金字塔 塔顶的最大值 最大值存入第n-1行 { down=a[i][j]+a[i+1][j]; right=a[i][j]+a[i+1][j+1]; if(down>=right)a[i][j]=down; else a[i][j]=right; } fun(a,n-1); } int main() { int n,max=0,i,j; scanf("%d",&n); //动态分配内存 int **a=(int**)malloc(n*sizeof(int*)); for(i=0;i<n;i++)a[i]=(int*)malloc(n*sizeof(int)); //输入 for(i=0;i<n;i++) { for(int j=0;j<i+1;j++) { scanf("%d",&a[i][j]); } } fun(a,n); printf("%d ",a[0][0]); return 0; }
60、发牌
#include <stdio.h> int main() { int a[4][13]={0};//记录花色 0-c,1-d,2-h,3-s int b[4][13]={0};//记录大小 int m=0,n=0; for(int i=0;i<4;i++) { for(int j=0;j<13;j++) { if(m<=3) { a[m][n]=i; b[m][n]=j; m++; } else if(m==4) { m=0; n++; a[m][n]=i; b[m][n]=j; m++; } } } int num; while(~scanf("%d",&num)) { num--; for(int k=0;k<13;k++) { //0-c,1-d,2-h,3-s if(a[num][k]==0)printf("c "); else if(a[num][k]==1)printf("d "); else if(a[num][k]==2)printf("h "); else printf("s "); if(k==12)printf("%d ",b[num][k]); else printf("%d ",b[num][k]); } } return 0; }
61、稀疏矩阵
#include <stdio.h> #include <malloc.h> void my_print(int** a,int m,int n) { for(int i=0;i<m;i++) { for(int j=0;j<n;j++) { if(a[i][j]!=0) { printf("%d %d %d ",i+1,j+1,a[i][j]); } } } } int main() { int m,n,i,j; while(~scanf("%d%d",&m,&n)) { int** a=(int**)malloc(sizeof(int*)*m); for(i=0;i<m;i++)a[i]=(int*)malloc(sizeof(int)*n); for(i=0;i<m;i++) for(j=0;j<n;j++) scanf("%d",&a[i][j]); my_print(a,m,n); printf(" "); } return 0; }
62、矩阵问题
#include <stdio.h> #include <malloc.h> void my_print(int ** a,int m,int n) { int i,j; for( i=0;i<m;i++) { for( j=0;j<n-1;j++) printf("%d ",a[i][j]); printf("%d ",a[i][j]); } for( i=m-2;i>=0;i--) { for( j=0;j<n-1;j++) { if(a[i][j]==2) printf("3 "); else printf("%d ",a[i][j]); } printf("%d ",a[i][j]); } } int main() { int num,m,n,i,j; while(~scanf("%d",&num)) { m=num+1; n=2*num+1; int **a=(int**)malloc(sizeof(int*)*m); for(i=0;i<m;i++)a[i]=(int*)malloc(sizeof(int)*n); for(i=0;i<m;i++) for(j=0;j<n;j++) { if(i==j||j==n-i-1)a[i][j]=1; else if(j>i&&j<n-i-1)a[i][j]=2; else if(j<i)a[i][j]=4; else a[i][j]=5; } my_print(a,m,n); } return 0; }
63、倒序
#include <stdio.h> #include <string.h> void my_print(char* str) { int len=strlen(str); for(int i=len-1;i>=0;i--)printf("%c",str[i]); printf(" "); } int main() { int n;scanf("%d",&n); char ch[1000]; while(n--) { getchar(); scanf("%[^ ]",ch); my_print(&ch[0]); } return 0; }
64、统计字母
#include <stdio.h> #include <string.h> void my_print(int * result) { for(int i=0;i<26;i++) { if(result[i]>0) printf("%c:%d ",'A'+i,result[i]); } } void fun(char *str,int* result) { for(int i=0;i<26;i++)result[i]=0; char temp; while(*str) { if(*str=='!'){str++;continue;} if(*str>='a'&&*str<='z') temp=*str-32; else temp=*str; result[(int)(temp-'A')]++; str++; } my_print(result); } int main() { char ch[100]; int result[26]={0}; scanf("%s",ch); fun(&ch[0],result); while(getchar&&~scanf("%s",ch))fun(&ch[0],result); return 0; }
65、求小数位数个数
#include <stdio.h> #include <string.h> int fun(char* str) { int flag=0,count=0; while(*str) { if(!flag&&*str=='.')flag=1; else if(flag)count++; str++; } return count; } int main() { char ch[100]; scanf("%s",&ch); printf("%d ",fun(&ch[0])); while(getchar()&&~scanf("%s",&ch))printf("%d ",fun(&ch[0])); return 0; }
66、加密
#include <stdio.h> #include <string.h> void fun(char* str) { char *origin=str; while(*str) { if(*str>='0'&&*str<='9')*str='a'+*str-'0'; else if(*str>='a'&&*str<='j')*str='0'+*str-'a'; str++; } printf("%s ",origin); } int main() { char ch[100]; scanf("%s",ch); fun(&ch[0]); while(getchar&&~scanf("%s",ch))fun(&ch[0]); return 0; }
67、求绝对值
#include <stdio.h> #include <string.h> void fun(char* str) { if(*str=='-') printf("%s ",str+1); else printf("%s ",str); } int main() { char ch[1000]; scanf("%s",ch); fun(&ch[0]); while(getchar&&~scanf("%s",ch))fun(&ch[0]); return 0; }
68、请给我加密
#include <stdio.h> #include <string.h> void fun(char* str,int key) { char *origin=str; int a[100]; int size=0,i; while(*str) { if(*str>='a'&&*str<='z')a[size++]=*str-'a'+key+1; else if(*str>='A'&&*str<='Z')a[size++]=*str-'A'+key+1; else if(*str==' ')a[size++]=0; else a[size++]=*str-'