xml地图|网站地图|网站标签 [设为首页] [加入收藏]

Judge经典题型,c语言入门经典必背18个程序

#includestdio.h#includemath.hintmain(){inti,a,k=0,j,n;for(i=5;i=1000;i++){n=i;do{a=n%10;n=n/10;k=k*10+a;}while(n);if(k==i)printf("%dt",i);//{//for(j=2;ji;j++)//{//if(i%j==0)//break;//else//printf("%dt",i);//}//}}return0;}为什么只能输出5,我想输出所有回文数

「C语言」「刷题」XUPT Online Judge经典题型,xupt

    在学校OJ网( 

    3.6日才刚刚开始刷,慢慢添加那些比较经典的,并尽量用多种方法求解后思考哪一种最适合。

 

必威 1 1 #include <stdio.h> 2 #include <math.h> 3 #define A 2 4 5 int f(int i,int k) 6 { 7 int j; 8 j=k*A*pow(10,i); 9 return j; 10 } 11 12 int main() 13 { 14 int n,i,j,k,sum=0; 15 scanf("%d",&n); 16 k=n; 17 for(i=0;i<n;i++) 18 { 19 j=f(i,k); 20 sum+=j; 21 k--; 22 } 23 printf("%d",sum); 24 return 0; 25 } 2+22+222+...+n个2

 

必威 2 1 #include <stdio.h> 2 3 int main() 4 { 5 int m,n,max,min,i; 6 scanf("%d%d",&m,&n); 7 if(m<n) 8 { 9 m=m+n; 10 n=m-n; 11 m=m-n; 12 } 13 for(i=n;i>0;i--) 14 { 15 if(m%i==0 && n%i==0) 16 { 17 max=i; 18 break; 19 } 20 } 21 for(i=m;;i++) 22 { 23 if(i%m==0 && i%n==0) 24 { 25 min=i; 26 break; 27 } 28 } 29 printf("%d %d",max,min); 30 return 0; 31 } 最大公约数与最小公倍数

 

必威 3 1 #include <stdio.h> 2 3 4 int main() 5 { 6 int a,b[5]={0,0,0,0,0},i=0,len=0; 7 scanf("%d",&a); 8 while(i<5) 9 { 10 b[i]=a%10; 11 a=a/10; 12 len++; 13 if(a==0) 14 break; 15 i++; 16 } 17 printf("%dn",len); 18 for(i=len-1;i>0;i--) 19 printf("%d ",b[i]); 20 printf("%dn",b[i]); 21 for(i=0;i<len;i++) 22 printf("%d",b[i]); 23 return 0; 24 } 判断一个数的位数及逆序数(倒着输出)

 

必威 4 1 #include <stdio.h> 2 #include <math.h> 3 4 int main() 5 { 6 int i,j,k,t,sum; 7 for(i=100;i<=999;i++) 8 { 9 sum=0; 10 k=i; 11 for(j=0;j<3;j++) 12 { 13 t=k%10; 14 sum+=pow(t,3); 15 k=k/10; 16 } 17 if(i==sum) 18 printf("%dn",i); 19 } 20 return 0; 21 } 100到999的水仙花数(该三位数中每位的3次方和等于这位数)

 

必威 5 1 #include <stdio.h> 2 #include <math.h> 3 4 void ifperfect(int n) 5 { 6 int i,k=0,a[100]={0},sum=0; 7 for(i=1;i<n;i++) 8 { 9 if(n%i==0) 10 { 11 a[k]=i; 12 sum+=a[k]; 13 k++; 14 } 15 } 16 if(n==sum) 17 { 18 printf("%d its factors are ",n); 19 for(i=0;i<sizeof(a)-1;i++) 20 { 21 if(a[i+1]==0) 22 break; 23 printf("%d ",a[i]); 24 } 25 printf("%dn",a[i]); 26 } 27 } 28 29 int main() 30 { 31 int n,i,j; 32 scanf("%d",&n); 33 for(i=1;i<n;i++) 34 ifperfect(i); 35 return 0; 36 } 输出n以内的完全数(它等于它的所有因子之和)

 

必威 6 1 #include <stdio.h> 2 3 int main() 4 { 5 int i,j,a[10]; 6 for(i=0;i<10;i++) 7 scanf("%d",&a[i]); 8 for(i=0;i<9;i++) 9 { 10 for(j=i+1;j<10;j++) 11 { 12 if(a[i]>a[j]) 13 { 14 a[i]^=a[j]; 15 a[j]^=a[i]; 16 a[i]^=a[j]; 17 } 18 } 19 } 20 for(i=0;i<10;i++) 21 { 22 printf("%dn",a[i]); 23 } 24 return 0; 25 } 数组排序

 

Online Judge经典题型,xupt 在学校OJ网( 3.6日才刚刚开...

描述有一个整型偶数n(2<= n <=10000),你要做的是:先把1到n中的所有奇数从小到大输出,再把所有的偶数从小到大输出。

1 、 /* 输出 9*9 口诀。共 9 行 9 列, i 控制行, j 控制列。 */ #include "stdio.h" main() {int i,j,result; for (i=1;i<10;i++) { for(j=1;j<10;j++) { result=i*j; printf("%d*%d=%-3d",i,j,result);/*-3d 表示左对齐,占 3 位 */ } printf("n");/* 每一行后换行 */ } }

 

2 、 /* 古典问题:有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔 子都不死,问每个月的兔子总数为多少? 兔子的规律为数列 1,1,2,3,5,8,13,21....*/ main() { long f1,f2; int i; f1=f2=1; for(i=1;i<=20;i++) { printf("%12ld %12ld",f1,f2); if(i%2==0) printf("n");/* 控制输出,每行四个 */ f1=f1+f2; /* 前两个月加起来赋值给第三个月 */ f2=f1+f2; /* 前两个月加起来赋值给第三个月 */ } }

输入
第一行有一个整数i(2<=i<30)表示有 i 组测试数据;
每组有一个整型偶数n。

3 、 /* 判断 101-200 之间有多少个素数,并输出所有素数及素数的个数。 程序分析:判断素数的方法:用一个数分别去除 2 到 sqrt( 这个数 ) ,如果能被整除, 则表明此数不是素数,反之是素数。 */ #include "math.h" main() { int m,i,k,h=0,leap=1; printf("n"); for(m=101;m<=200;m++) { k=sqrt(m+1); for(i=2;i<=k;i++) if(m%i==0) {leap=0;break;} if(leap) /* 内循环结束后, leap 依然为 1 ,则 m 是素数 */ {printf("%-4d",m);h++;if(h%10==0) printf("n"); } leap=1; } printf("nThe total is %d",h); }

输出
第一行输出所有的奇数
第二行输出所有的偶数

4 、 /* 一个数如果恰好等于它的因子之和,这个数就称为 “ 完数 ” 。例如 6=1 + 2 + 3. 编程 找出 1000 以内的所有完数。 */ main() { static int k[10]; int i,j,n,s; for(j=2;j<1000;j++) { n=-1; s=j; for(i=1;i<j;i++) {if((j%i)==0) { n++; s=s-i; k[n]=i; } } if(s==0) {printf("%d is a wanshu: ",j); for(i=0;i<n;i++) printf("%d,",k[i]); printf("%dn",k[n]); } } }

样例输入
2 10 14

5 、 /* 下面程序的功能是将一个 4 × 4 的数组进行逆时针旋转 90 度后输出,要求原始数组的数据随机输入,新数组以 4 行 4 列的 方式输出, 请在空白处完善程序。 */ main() { int a[4][4],b[4][4],i,j; /*a 存放原始数组数据, b 存放旋转后数组数据 */ printf("input 16 numbers: "); /* 输入一组数据存放到数组 a 中,然后旋转存放到 b 数组中 */ for(i=0;i<4;i++) for(j=0;j<4;j++) { scanf("%d",&a[i][j]); b[3-j][i]=a[i][j]; }printf("array b:n"); for(i=0;i<4;i++) { for(j=0;j<4;j++) printf("%6d",b[i][j]); printf("n"); } }

样例输出
1 3 5 7 9 2 4 6 8 10

6 、 /* 编程打印直角杨辉三角形 */ main() {int i,j,a[6][6]; for(i=0;i<=5;i++) {a[必威,i][i]=1;a[i][0]=1;} for(i=2;i<=5;i++) for(j=1;j<=i-1;j++) a[i][j]=a[i-1][j]+a[i-1][j-1]; for(i=0;i<=5;i++) {for(j=0;j<=i;j++) printf("%4d",a[i][j]); printf("n");} }

1 3 5 7 9 11 13 
2 4 6 8 10 12 14 

7 、/* 通过键盘输入 3 名学生 4 门课程的成绩, 分别求每个学生的平均成绩和每门课程的平均成绩。 要求所有成绩均放入一个 4 行 5 列的数组中,输入时同一人数据间用空格 , 不同人用回车 其中最后一列和最后一行分别放每个学生的平均成绩、每门课程的平均成绩及班级总平均分。 */ #include <stdio.h> #include <stdlib.h> main() { float a[4][5],sum1,sum2; int i,j; for(i=0;i<3;i++) for(j=0;j<4;j++) scanf("%f",&a[i][j]); for(i=0;i<3;i++) { sum1=0; for(j=0;j<4;j++) sum1+=a[i][j]; a[i][4]=sum1/4; } for(j=0;j<5;j++) { sum2=0; for(i=0;i<3;i++) sum2+=a[i][j]; a[3][j]=sum2/3; }for(i=0;i<4;i++) { for(j=0;j<5;j++) printf("%6.2f",a[i][j]); printf("n"); } }

 

8 、 /* 完善程序,实现将输入的字符串反序输出, 如输入 windows 输出 swodniw 。 */ #include <string.h> main() { char c[200],c1; int i,j,k; printf("Enter a string: "); scanf("%s",c); k=strlen(c); for (i=0,j=k-1;i<k/2;i++,j--) { c1=c[i];c[i]=c[j];c[j]=c1; } printf("%sn",c); } 指针法: void invert(char *s) {int i,j,k; char t; k=strlen(s); for(i=0,j=k-1;i<k/2;i++,j--) { t=*(s+i); *(s+i)=*(s+j); *(s+j)=t; } } main() { FILE *fp; char str[200],*p,i,j; if((fp=fopen("p9_2.out","w"))==NULL) { printf("cannot open the filen"); exit(0); } printf("input str:n"); gets(str); printf( “ n%s ” ,str); fprintf(fp, “ %s ” ,str); invert(str); printf( “ n%s ” ,str); fprintf(fp, “ n%s ” ,str); fclose(fp);}

 

9 、 /* 下面程序的功能是从字符数组 s 中删除存放在 c 中的字符。 */ #include <stdio.h> main() { char s[80],c; int j,k; printf("nEnter a string: "); gets(s); printf("nEnter a character: "); c=getchar( ); for(j=k=0;s[j]!= '';j++) if(s[j]!=c) s[k++]=s[j]; s[k]= ''; printf("n%s",s); }

#include <stdio.h>
#include <stdlib.h>

10 、 /* 编写一个 void sort(int *x,int n) 实现将 x 数组中的 n 个数据从大到小 排序。 n 及数组元素在主函数中输入。将结果显示在屏幕上并输出到文件 p9_1.out 中 */ #include<stdio.h> void sort(int *x,int n) { int i,j,k,t; for(i=0;i<n-1;i++) { k=i; for(j=i+1;j<n;j++) if(x[j]>x[k]) k=j; if(k!=i) { t=x[i]; x[i]=x[k]; x[k]=t; } } } void main() {FILE *fp; int *p,i,a[10]; fp=fopen("p9_1.out","w"); p=a; printf("Input 10 numbers:"); for(i=0;i<10;i++) scanf("%d",p++); p=a;sort(p,10); for(;p<a+10;p++) { printf("%d ",*p); fprintf(fp,"%d ",*p); } system("pause"); fclose(fp); }

int main(int argc, char *argv[])
{
int i;
int j=1;
int k=0;
int t=0;
int m=0;
int a[30];
scanf("%d",&i);
for(t=0;t<i;t++)
scanf("%d",&a[t]);
for(m=0;m<t;m++)
{
while(j<a[m])
{
printf("%d ",j);
j+=2;
}
j=1;
printf("n");
while(k<a[m])
{
k+=2;
printf("%d ",k);
}
k=0;
printf("n");
}
return 0;
}

 

本文由必威发布于编程,转载请注明出处:Judge经典题型,c语言入门经典必背18个程序