上机题及答案汇总.docx
《上机题及答案汇总.docx》由会员分享,可在线阅读,更多相关《上机题及答案汇总.docx(43页珍藏版)》请在冰点文库上搜索。
上机题及答案汇总
1温度转换
描述
已知华氏温度到摄氏温度的转换公式为:
摄氏温度=(华氏温度-32)×5/9,写程序将给定的华氏温度转换为摄氏温度输出
输入说明
只有一个整数,表示输入的华氏温度
输出说明
输出一个表示摄氏温度的实数,小数点后保留2位有效数字,多余部分四舍五入
输入样例
50
输出样例
10.00
2计算球体重量
已知铁的比重是7.86,金的比重是19.3。
写一个程序,分别计算出给定直径的铁球与金球的质量,假定PI=3.1415926
输入两个整数,分别表示铁球与金球的直径(单位为毫米)
输出两个浮点数,分别表示铁球与金球的质量(单位为克),小数点后保留3位小数,两个浮点数之间用空格分隔
100100
4115.48610105.456
提示
#include
intmain(){
doubleFe=7.86,Au=19.3,Pi=3.1415926;
intm,n;
floatM1,M2;
scanf("%d%d",&m,&n);//注意,要使输出的两个数据中间无逗号,“”之间要无逗号,下面也如此
M1=(4.0/3)*Pi*m/2*m/2*m/2*Fe/1000;
M2=(4.0/3)*Pi*n/2*n/2*n/2*Au/1000;
printf("%.3f%.3f",M1,M2);
return0;
}
3阶梯电价计费
电价分三个档次,[0,110]度电,每度电0.5元;(110,210]度电,超出110部分每度电0.55元,超过210度电,超出210部分每度电0.70元,给出一个家庭一月用电量,请计算出应缴的电费(四舍五入,保留小数点后两位小数)。
第一行为1个整数m(100>m>0),表示有多少组数据。
其后一行为m个正实数,表示m个用电量数据
一行输出1个电费数据(四舍五入保留2位小数)后,换行。
3
100200329.75
50.00
104.50
193.82
(1)自己的
doublefare(doublem){
doublen;
if(m>=0&&m<=100)
n=0.5*m;
if(m>110){
if(m<=210)
n=0.5*110+0.55*(m-110);
else
n=0.5*110+0.55*(210-110)+0.70*(m-210);
returnn;
intmain()
{
inta,b;
doublec;
scanf("%d",&a);
for(b=0;b{scanf("%lf",&c);printf("%.2f\n",fare(c));}return0;}(2)别人的#includedoublemoney(doublex){if(x>=100&&x<=110)return0.5*x;if(x>110&&x<=210)return0.5*110+0.55*(x-110);if(x>210)return0.5*110+0.55*100+0.7*(x-210);}intmain(){inta,b;doublec;scanf("%d",&a);for(b=0;b{scanf("%lf",&c);printf("%.2f\n",money(c));}return0;}4计算某月天数描述每个月的1,3,5,7,8,10,12月有31天,4,6,9,11月有30天,闰年2月29天,其他年份2月28天,给定年份和月份求该月的天数输入说明多组数据,输入数据第一行为整数n(n<100),表示有几组数据数据,其后为n行,每行表示一组数据,每组数据由两个正整数a和b构成,a表示年份,b表示月份,a和b之间用空格分隔输出说明根据年份和月份计算该月天数并输出,每输出一个天数后换行输入样例3200032011520082输出样例313129程序问题:输入时年份和月份在同一行,按空格分开,不能按回车换行1别人的#includevoidtianshu(intx,inty){if(y==1||y==3||y==5||y==7||y==8||y==10||y==12)printf("%d\n",31);elseif(y==4||y==6||y==9||y==11)printf("%d\n",30);elseif((x%4==0&&x%100!=0||x%400==0)&&y==2)printf("%d\n",29);elseif(y==2)printf("%d\n",28);}intmain(){inta,b,m,n;scanf("%d",&n);for(m=1;m<=n;++m){scanf("%d%d",&a,&b);tianshu(a,b);}return0;}2自己的#includeintmain(){inta,b;scanf("%d\n",&a);for(b=0;b{intyear,month,days;scanf("%d%d",&year,&month);switch(month){case2:if(year%4==0&&year%100!=0||year%400==0)days=29;elsedays=28;break;case1:case3:case5:case7:case8:case10:case12:days=31;break;case4:case6:case9:case11:days=30;break;}printf("%d\n",days);}return0;}5计算整数各位数字之和描述假设n是一个由最多9位数字(d9,…,d1)组成的正整数。编写一个程序计算n的每一位数字之和输入说明有多组数据,输入数据第1行为整数m(m<100),表示有多少组数据,其后一行m个正整数输出说明对每一个整数n输出它的各位数字之和后换行输入样例363704170498输出样例614291别人的#includevoidsum(inta){intx,y;intsum=0;for(x=100000000;x>0;x=x/10){y=a/x;a=a-y*x;sum+=y;}printf("%d\n",sum);}intmain(){intm,n,x;scanf("%d",&m);for(n=1;n<=m;++n){scanf("%d",&x);sum(x);}return0;}2自己的#includeintmain(){intm,a;scanf("%d",&m);for(a=1;a<=m;a++){intsum=0,x,y,n;scanf("%d",&n);for(x=100000000;x>0;x=x/10){y=n/x;sum+=y;n=n-x*y;}printf("%d\n",sum);}return0;}6完数描述请写一个程序,给出指定整数范围[a,b]内的所有完数,0一个数如果恰好等于除它本身外的所有因子之和,这个数就称为"完数"。例如6是完数,因为6=1+2+3输入说明只有一组数据,即一行上的两个整数a和b,a和b之间用空格分隔输出说明输出[a,b]内的所有完数,每个数字占一行输入样例110输出样例61别人的#include#includeintwanshu(intn){intm;intsum=0;for(m=1;mif(n%m==0)sum+=m;}if(n==sum)return1;elsereturn0;}intmain(){intm,n,i;scanf("%d%d",&m,&n);for(i=m;i<=n;++i){if(wanshu(i)==1)printf("%d\n",i);}return0;}2自己的#includevoidwanshu(intn){intm,sum=0;for(m=1;m{if(n%m==0)sum+=m;}if(sum==n)printf("%d\n",n);}intmain(){inta,b,n;scanf("%d%d",&a,&b);for(n=a;n<=b;n++)wanshu(n);printf("\n");return0;}#includeintmain(){inta,b,m,x,sum=0;scanf("%d%d",&a,&b);for(x=a;x<=b;x++){for(m=1;m{if(x%m==0)sum+=m;}if(sum==x)printf("%d\n",x);}return0;}7最大公约数描述最大公约数(GCD)指某几个整数共有因子中最大的一个,最大公约数具有如下性质,gcd(a,0)=agcd(a,1)=1因此当两个数中有一个为0时,gcd是不为0的那个整数,当两个整数互质时最大公约数为1。定义函数:intgcd(inta,intb),返回两个参数的最大公约数。并写一个主函数调用该函数,实验各种输入参数情况。输入说明多组数据,每组数据由同一行的两个正整数a和b构成(0<=a,b<10000),a和b之间用空格分隔,当a和b都为0时表示输入结束输出说明对每组数据输出其最大公约数后换行输入样例241263500输出样例261输入实例:241263500#includeintgcd(inta,intb){intn;if(a==0&&b==0)return0;if(a==0)returnb;if(b==0)returna;for(n=(a>b?b:a);a%n!=0||b%n!=0;n--);returnn;}intmain(){inta,b;while(1)//也可写为for(;;){scanf("%d%d",&a,&b);if(a==0&&b==0)break;printf("%d\n",gcd(a,b));}return0;}8角谷定理描述测试,角谷定理:输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。求经过多少次可得到自然数1。如:例如数据22的变化过程:221134175226134020105168421,数据变化次数为16。可用迭代法或递归法实现。输入说明第一行1个整数m(100>m>0),表示有多少组数据。其后一行为m个正整数,表示m个数据。输出说明一行输出1个数据变换次数后,换行输入样例3223343输出样例162730#includeintjg(intn){statici=0,m;++i;if(n==1){m=i;i=0;returnm;}else{if(n%2==0)n=n/2;elsen=n*3+1;jg(n);}}intmain(){inta,b,n;scanf("%d",&a);for(b=0;b{scanf("%d",&n);printf("%d\n",jg(n));}return0;}9递归数列描述下列给定程序中,用递归实现函数fun,其功能是:根据整型参数n,计算如下公式的值。A(1)=1,A(2)=1/(1+A(1)),A(3)=1/(1+A(2)),……,A(n)=1/(1+A(n-1))。输入说明第一行1个整数m(100>m>0),表示有多少组数据。其后一行为m个正整数,表示m个整数。输出说明一行输出数列对应数据,换行。小数点后保留6位有效数字,多余部分四舍五入。输入样例3358输出样例0.6666670.6250000.617647#includedoublefun(intn){returnn==1?1:1/(1+fun(n-1));}intmain(){inta,b,c;scanf("%d",&a);for(b=0;b{scanf("%d",&c);printf("%.6f\n",fun(c));}return0;}10水仙花数描述水仙花数是指一个n位数(n≥3),它的每个位上的数字的n次幂之和等于它本身。(例如:1^3+5^3+3^3=153)。定义一个函数intfun(inta,intb),计算区间[a,b]或[b,a]的水仙花数。输入说明第一行1个整数m(100>m>0),表示有多少组数据。每行表示一组数据,每组数据由两个整数a和b构成,计算[a,b]或[b,a]间的水仙花数,a和b之间用空格分隔。输出说明输出区间[a,b]或[b,a]的水仙花数数量,换行。输入样例2310004005000输出样例42#include#includeenum{num=100};intfun(inta,intb){intk,c,d[num],i,m=0,sum=0;if(a<100)a=100;for(;a>=100&&a<=b;a++){for(c=10,k=1;a/c>0;k++)c*=10;for(i=0;i{d[i]=(a%(int)pow(10,i+1)/(int)pow(10,i));sum+=(int)pow(d[i],k);}if(sum==a)m++;sum=0;}returnm;}intmain(){inta,b,m;scanf("%d",&m);while(m--){scanf("%d%d",&a,&b);printf("%d\n",fun(a,b));}return0;}11歌德巴赫猜想描述编写函数isPrime(longn),说明如下:函数的功能是判断给定的正整数n是否为素数,函数的返回值1/0表示n是/不是素数。编写main()函数,调用isPrime()验证歌德巴赫猜想:任意一个大偶数都能分解为两个素数的和。输入说明第一行1个整数m(100>m>0),表示有多少组数据。其后一行为m个正偶数,表示m个数据。输出说明每行输出2个数据表示分解的素数(每个正偶数可能分解成多组素数和,仅输出分解值分别是最小和最大素数的一组,从小到大输出),换行。输入样例21020输出样例37317#includeintisprime(longn){intm;if(n<=1)return0;for(m=2;mif(n%m==0)return0;return1;}intmain(){intm,n;scanf("%d",&m);for(n=1;n<=m;n++){longa,b;scanf("%ld",&a);for(b=a-1;b>=2;--b)if(isprime(b)==1&&isprime(a-b)==1)break;printf("%ld%ld\n",a-b,b);}return0;}12矩阵描述请写一个程序,对于一个m行m列(2主对角线是方正从左上角到右下角的一条斜线,辅对角线是方阵从右上角到左下角的一条斜线),然后按照从大到小的顺序依次输出这些值。输入说明只有一组数据;输入数据的第一行为一个正整数,表示m;接下来为m行、每行m个整数表示方阵的元素。输出说明从大到小排列的一行整数,每个整数后跟一个空格,最后换行。输入样例4158-2631241871-3-9271317213869输出样例159145144135816044322827#includeintmain(){intm,i,j,a[20][20]={0},b[42]={0},k;scanf("%d",&m);for(i=0;ifor(j=0;jscanf("%d",&a[i][j]);b[i]+=a[i][j];if(j==m)printf("\n");}for(j=0,k=m;jfor(i=0;ib[k]+=a[i][j];for(i=0,j=0;ifor(j=m-1,i=0;ifor(i=1;i<2*m+2;++i){for(k=b[i],j=i-1;j>=0&&b[j]>k;--j)b[j+1]=b[j];if(j!=i-1)b[j+1]=k;}for(i=2*m+1;i>=0;--i)printf("%d%c",b[i],'');printf("\n");return0;}//自己做的排序,比较简单for(i=1;i<=2*m+2;i++){for(j=1;j<=2*m+2;j++)if(b[j-1]{t=b[j-1];b[j-1]=b[j];b[j]=t;}}for(j=0;j<2*m+2;j++)printf("%d",b[j]);13回文数描述若一个整数其各位数字按照正反顺序读完全相同,则称之为回文数,例如12321。判断给出的整数是否是回文数。若是,则输出该整数各位数字之和,否则输出no.输入说明输入包含多组数据,第一行为整数n表示有几组数据,其后为n行数据,每行一个整数。输出说明对每一个整数,若该整数为回文数,则输出整数各位数字之和,否则输出no,然后换行。输入样例213124输出样例5no#include#includeintmain(){inta[200]={0},b,c,d=0,m,n,i,k,p,sum=0;scanf("%d",&n);for(m=0;mscanf("%d",&b);for(k=1,c=10;b/c>0;++k)c*=10;//注意此处k与下面略有不同for(i=0,p=k-1;ia[i]=(b%(int)pow(10,i+1))/(int)pow(10,i);sum+=a[i];d+=a[i]*pow(10,p);}if(d==b)printf("%d\n",sum);elseprintf("no\n");sum=0;d=0;}return0;}#include#includeintmain(){inta[200],m,n,i,k,p,c,d=0,sum=0;scanf("%d",&m);while(m--){scanf("%d",&n);for(k=0,c=10;n/c>0;k++)c*=10;for(i=0,p=k;i
scanf("%lf",&c);
printf("%.2f\n",fare(c));
(2)别人的
doublemoney(doublex)
if(x>=100&&x<=110)
return0.5*x;
if(x>110&&x<=210)
return0.5*110+0.55*(x-110);
if(x>210)
return0.5*110+0.55*100+0.7*(x-210);
for(b=0;b{scanf("%lf",&c);printf("%.2f\n",money(c));}return0;}4计算某月天数描述每个月的1,3,5,7,8,10,12月有31天,4,6,9,11月有30天,闰年2月29天,其他年份2月28天,给定年份和月份求该月的天数输入说明多组数据,输入数据第一行为整数n(n<100),表示有几组数据数据,其后为n行,每行表示一组数据,每组数据由两个正整数a和b构成,a表示年份,b表示月份,a和b之间用空格分隔输出说明根据年份和月份计算该月天数并输出,每输出一个天数后换行输入样例3200032011520082输出样例313129程序问题:输入时年份和月份在同一行,按空格分开,不能按回车换行1别人的#includevoidtianshu(intx,inty){if(y==1||y==3||y==5||y==7||y==8||y==10||y==12)printf("%d\n",31);elseif(y==4||y==6||y==9||y==11)printf("%d\n",30);elseif((x%4==0&&x%100!=0||x%400==0)&&y==2)printf("%d\n",29);elseif(y==2)printf("%d\n",28);}intmain(){inta,b,m,n;scanf("%d",&n);for(m=1;m<=n;++m){scanf("%d%d",&a,&b);tianshu(a,b);}return0;}2自己的#includeintmain(){inta,b;scanf("%d\n",&a);for(b=0;b{intyear,month,days;scanf("%d%d",&year,&month);switch(month){case2:if(year%4==0&&year%100!=0||year%400==0)days=29;elsedays=28;break;case1:case3:case5:case7:case8:case10:case12:days=31;break;case4:case6:case9:case11:days=30;break;}printf("%d\n",days);}return0;}5计算整数各位数字之和描述假设n是一个由最多9位数字(d9,…,d1)组成的正整数。编写一个程序计算n的每一位数字之和输入说明有多组数据,输入数据第1行为整数m(m<100),表示有多少组数据,其后一行m个正整数输出说明对每一个整数n输出它的各位数字之和后换行输入样例363704170498输出样例614291别人的#includevoidsum(inta){intx,y;intsum=0;for(x=100000000;x>0;x=x/10){y=a/x;a=a-y*x;sum+=y;}printf("%d\n",sum);}intmain(){intm,n,x;scanf("%d",&m);for(n=1;n<=m;++n){scanf("%d",&x);sum(x);}return0;}2自己的#includeintmain(){intm,a;scanf("%d",&m);for(a=1;a<=m;a++){intsum=0,x,y,n;scanf("%d",&n);for(x=100000000;x>0;x=x/10){y=n/x;sum+=y;n=n-x*y;}printf("%d\n",sum);}return0;}6完数描述请写一个程序,给出指定整数范围[a,b]内的所有完数,0一个数如果恰好等于除它本身外的所有因子之和,这个数就称为"完数"。例如6是完数,因为6=1+2+3输入说明只有一组数据,即一行上的两个整数a和b,a和b之间用空格分隔输出说明输出[a,b]内的所有完数,每个数字占一行输入样例110输出样例61别人的#include#includeintwanshu(intn){intm;intsum=0;for(m=1;mif(n%m==0)sum+=m;}if(n==sum)return1;elsereturn0;}intmain(){intm,n,i;scanf("%d%d",&m,&n);for(i=m;i<=n;++i){if(wanshu(i)==1)printf("%d\n",i);}return0;}2自己的#includevoidwanshu(intn){intm,sum=0;for(m=1;m{if(n%m==0)sum+=m;}if(sum==n)printf("%d\n",n);}intmain(){inta,b,n;scanf("%d%d",&a,&b);for(n=a;n<=b;n++)wanshu(n);printf("\n");return0;}#includeintmain(){inta,b,m,x,sum=0;scanf("%d%d",&a,&b);for(x=a;x<=b;x++){for(m=1;m{if(x%m==0)sum+=m;}if(sum==x)printf("%d\n",x);}return0;}7最大公约数描述最大公约数(GCD)指某几个整数共有因子中最大的一个,最大公约数具有如下性质,gcd(a,0)=agcd(a,1)=1因此当两个数中有一个为0时,gcd是不为0的那个整数,当两个整数互质时最大公约数为1。定义函数:intgcd(inta,intb),返回两个参数的最大公约数。并写一个主函数调用该函数,实验各种输入参数情况。输入说明多组数据,每组数据由同一行的两个正整数a和b构成(0<=a,b<10000),a和b之间用空格分隔,当a和b都为0时表示输入结束输出说明对每组数据输出其最大公约数后换行输入样例241263500输出样例261输入实例:241263500#includeintgcd(inta,intb){intn;if(a==0&&b==0)return0;if(a==0)returnb;if(b==0)returna;for(n=(a>b?b:a);a%n!=0||b%n!=0;n--);returnn;}intmain(){inta,b;while(1)//也可写为for(;;){scanf("%d%d",&a,&b);if(a==0&&b==0)break;printf("%d\n",gcd(a,b));}return0;}8角谷定理描述测试,角谷定理:输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。求经过多少次可得到自然数1。如:例如数据22的变化过程:221134175226134020105168421,数据变化次数为16。可用迭代法或递归法实现。输入说明第一行1个整数m(100>m>0),表示有多少组数据。其后一行为m个正整数,表示m个数据。输出说明一行输出1个数据变换次数后,换行输入样例3223343输出样例162730#includeintjg(intn){statici=0,m;++i;if(n==1){m=i;i=0;returnm;}else{if(n%2==0)n=n/2;elsen=n*3+1;jg(n);}}intmain(){inta,b,n;scanf("%d",&a);for(b=0;b{scanf("%d",&n);printf("%d\n",jg(n));}return0;}9递归数列描述下列给定程序中,用递归实现函数fun,其功能是:根据整型参数n,计算如下公式的值。A(1)=1,A(2)=1/(1+A(1)),A(3)=1/(1+A(2)),……,A(n)=1/(1+A(n-1))。输入说明第一行1个整数m(100>m>0),表示有多少组数据。其后一行为m个正整数,表示m个整数。输出说明一行输出数列对应数据,换行。小数点后保留6位有效数字,多余部分四舍五入。输入样例3358输出样例0.6666670.6250000.617647#includedoublefun(intn){returnn==1?1:1/(1+fun(n-1));}intmain(){inta,b,c;scanf("%d",&a);for(b=0;b{scanf("%d",&c);printf("%.6f\n",fun(c));}return0;}10水仙花数描述水仙花数是指一个n位数(n≥3),它的每个位上的数字的n次幂之和等于它本身。(例如:1^3+5^3+3^3=153)。定义一个函数intfun(inta,intb),计算区间[a,b]或[b,a]的水仙花数。输入说明第一行1个整数m(100>m>0),表示有多少组数据。每行表示一组数据,每组数据由两个整数a和b构成,计算[a,b]或[b,a]间的水仙花数,a和b之间用空格分隔。输出说明输出区间[a,b]或[b,a]的水仙花数数量,换行。输入样例2310004005000输出样例42#include#includeenum{num=100};intfun(inta,intb){intk,c,d[num],i,m=0,sum=0;if(a<100)a=100;for(;a>=100&&a<=b;a++){for(c=10,k=1;a/c>0;k++)c*=10;for(i=0;i{d[i]=(a%(int)pow(10,i+1)/(int)pow(10,i));sum+=(int)pow(d[i],k);}if(sum==a)m++;sum=0;}returnm;}intmain(){inta,b,m;scanf("%d",&m);while(m--){scanf("%d%d",&a,&b);printf("%d\n",fun(a,b));}return0;}11歌德巴赫猜想描述编写函数isPrime(longn),说明如下:函数的功能是判断给定的正整数n是否为素数,函数的返回值1/0表示n是/不是素数。编写main()函数,调用isPrime()验证歌德巴赫猜想:任意一个大偶数都能分解为两个素数的和。输入说明第一行1个整数m(100>m>0),表示有多少组数据。其后一行为m个正偶数,表示m个数据。输出说明每行输出2个数据表示分解的素数(每个正偶数可能分解成多组素数和,仅输出分解值分别是最小和最大素数的一组,从小到大输出),换行。输入样例21020输出样例37317#includeintisprime(longn){intm;if(n<=1)return0;for(m=2;mif(n%m==0)return0;return1;}intmain(){intm,n;scanf("%d",&m);for(n=1;n<=m;n++){longa,b;scanf("%ld",&a);for(b=a-1;b>=2;--b)if(isprime(b)==1&&isprime(a-b)==1)break;printf("%ld%ld\n",a-b,b);}return0;}12矩阵描述请写一个程序,对于一个m行m列(2主对角线是方正从左上角到右下角的一条斜线,辅对角线是方阵从右上角到左下角的一条斜线),然后按照从大到小的顺序依次输出这些值。输入说明只有一组数据;输入数据的第一行为一个正整数,表示m;接下来为m行、每行m个整数表示方阵的元素。输出说明从大到小排列的一行整数,每个整数后跟一个空格,最后换行。输入样例4158-2631241871-3-9271317213869输出样例159145144135816044322827#includeintmain(){intm,i,j,a[20][20]={0},b[42]={0},k;scanf("%d",&m);for(i=0;ifor(j=0;jscanf("%d",&a[i][j]);b[i]+=a[i][j];if(j==m)printf("\n");}for(j=0,k=m;jfor(i=0;ib[k]+=a[i][j];for(i=0,j=0;ifor(j=m-1,i=0;ifor(i=1;i<2*m+2;++i){for(k=b[i],j=i-1;j>=0&&b[j]>k;--j)b[j+1]=b[j];if(j!=i-1)b[j+1]=k;}for(i=2*m+1;i>=0;--i)printf("%d%c",b[i],'');printf("\n");return0;}//自己做的排序,比较简单for(i=1;i<=2*m+2;i++){for(j=1;j<=2*m+2;j++)if(b[j-1]{t=b[j-1];b[j-1]=b[j];b[j]=t;}}for(j=0;j<2*m+2;j++)printf("%d",b[j]);13回文数描述若一个整数其各位数字按照正反顺序读完全相同,则称之为回文数,例如12321。判断给出的整数是否是回文数。若是,则输出该整数各位数字之和,否则输出no.输入说明输入包含多组数据,第一行为整数n表示有几组数据,其后为n行数据,每行一个整数。输出说明对每一个整数,若该整数为回文数,则输出整数各位数字之和,否则输出no,然后换行。输入样例213124输出样例5no#include#includeintmain(){inta[200]={0},b,c,d=0,m,n,i,k,p,sum=0;scanf("%d",&n);for(m=0;mscanf("%d",&b);for(k=1,c=10;b/c>0;++k)c*=10;//注意此处k与下面略有不同for(i=0,p=k-1;ia[i]=(b%(int)pow(10,i+1))/(int)pow(10,i);sum+=a[i];d+=a[i]*pow(10,p);}if(d==b)printf("%d\n",sum);elseprintf("no\n");sum=0;d=0;}return0;}#include#includeintmain(){inta[200],m,n,i,k,p,c,d=0,sum=0;scanf("%d",&m);while(m--){scanf("%d",&n);for(k=0,c=10;n/c>0;k++)c*=10;for(i=0,p=k;i
printf("%.2f\n",money(c));
4计算某月天数
每个月的1,3,5,7,8,10,12月有31天,4,6,9,11月有30天,闰年2月29天,其他年份2月28天,给定年份和月份求该月的天数
多组数据,输入数据第一行为整数n(n<100),表示有几组数据数据,其后为n行,每行表示一组数据,每组数据由两个正整数a和b构成,a表示年份,b表示月份,a和b之间用空格分隔
根据年份和月份计算该月天数并输出,每输出一个天数后换行
20003
20115
20082
31
29
程序问题:
输入时年份和月份在同一行,按空格分开,不能按回车换行
1别人的
voidtianshu(intx,inty)
if(y==1||y==3||y==5||y==7||y==8||y==10||y==12)
printf("%d\n",31);
elseif(y==4||y==6||y==9||y==11)
printf("%d\n",30);
elseif((x%4==0&&x%100!
=0||x%400==0)&&y==2)
printf("%d\n",29);
elseif(y==2)
printf("%d\n",28);
inta,b,m,n;
scanf("%d",&n);
for(m=1;m<=n;++m)
scanf("%d%d",&a,&b);
tianshu(a,b);
2自己的
scanf("%d\n",&a);
for(b=0;b{intyear,month,days;scanf("%d%d",&year,&month);switch(month){case2:if(year%4==0&&year%100!=0||year%400==0)days=29;elsedays=28;break;case1:case3:case5:case7:case8:case10:case12:days=31;break;case4:case6:case9:case11:days=30;break;}printf("%d\n",days);}return0;}5计算整数各位数字之和描述假设n是一个由最多9位数字(d9,…,d1)组成的正整数。编写一个程序计算n的每一位数字之和输入说明有多组数据,输入数据第1行为整数m(m<100),表示有多少组数据,其后一行m个正整数输出说明对每一个整数n输出它的各位数字之和后换行输入样例363704170498输出样例614291别人的#includevoidsum(inta){intx,y;intsum=0;for(x=100000000;x>0;x=x/10){y=a/x;a=a-y*x;sum+=y;}printf("%d\n",sum);}intmain(){intm,n,x;scanf("%d",&m);for(n=1;n<=m;++n){scanf("%d",&x);sum(x);}return0;}2自己的#includeintmain(){intm,a;scanf("%d",&m);for(a=1;a<=m;a++){intsum=0,x,y,n;scanf("%d",&n);for(x=100000000;x>0;x=x/10){y=n/x;sum+=y;n=n-x*y;}printf("%d\n",sum);}return0;}6完数描述请写一个程序,给出指定整数范围[a,b]内的所有完数,0一个数如果恰好等于除它本身外的所有因子之和,这个数就称为"完数"。例如6是完数,因为6=1+2+3输入说明只有一组数据,即一行上的两个整数a和b,a和b之间用空格分隔输出说明输出[a,b]内的所有完数,每个数字占一行输入样例110输出样例61别人的#include#includeintwanshu(intn){intm;intsum=0;for(m=1;mif(n%m==0)sum+=m;}if(n==sum)return1;elsereturn0;}intmain(){intm,n,i;scanf("%d%d",&m,&n);for(i=m;i<=n;++i){if(wanshu(i)==1)printf("%d\n",i);}return0;}2自己的#includevoidwanshu(intn){intm,sum=0;for(m=1;m{if(n%m==0)sum+=m;}if(sum==n)printf("%d\n",n);}intmain(){inta,b,n;scanf("%d%d",&a,&b);for(n=a;n<=b;n++)wanshu(n);printf("\n");return0;}#includeintmain(){inta,b,m,x,sum=0;scanf("%d%d",&a,&b);for(x=a;x<=b;x++){for(m=1;m{if(x%m==0)sum+=m;}if(sum==x)printf("%d\n",x);}return0;}7最大公约数描述最大公约数(GCD)指某几个整数共有因子中最大的一个,最大公约数具有如下性质,gcd(a,0)=agcd(a,1)=1因此当两个数中有一个为0时,gcd是不为0的那个整数,当两个整数互质时最大公约数为1。定义函数:intgcd(inta,intb),返回两个参数的最大公约数。并写一个主函数调用该函数,实验各种输入参数情况。输入说明多组数据,每组数据由同一行的两个正整数a和b构成(0<=a,b<10000),a和b之间用空格分隔,当a和b都为0时表示输入结束输出说明对每组数据输出其最大公约数后换行输入样例241263500输出样例261输入实例:241263500#includeintgcd(inta,intb){intn;if(a==0&&b==0)return0;if(a==0)returnb;if(b==0)returna;for(n=(a>b?b:a);a%n!=0||b%n!=0;n--);returnn;}intmain(){inta,b;while(1)//也可写为for(;;){scanf("%d%d",&a,&b);if(a==0&&b==0)break;printf("%d\n",gcd(a,b));}return0;}8角谷定理描述测试,角谷定理:输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。求经过多少次可得到自然数1。如:例如数据22的变化过程:221134175226134020105168421,数据变化次数为16。可用迭代法或递归法实现。输入说明第一行1个整数m(100>m>0),表示有多少组数据。其后一行为m个正整数,表示m个数据。输出说明一行输出1个数据变换次数后,换行输入样例3223343输出样例162730#includeintjg(intn){statici=0,m;++i;if(n==1){m=i;i=0;returnm;}else{if(n%2==0)n=n/2;elsen=n*3+1;jg(n);}}intmain(){inta,b,n;scanf("%d",&a);for(b=0;b{scanf("%d",&n);printf("%d\n",jg(n));}return0;}9递归数列描述下列给定程序中,用递归实现函数fun,其功能是:根据整型参数n,计算如下公式的值。A(1)=1,A(2)=1/(1+A(1)),A(3)=1/(1+A(2)),……,A(n)=1/(1+A(n-1))。输入说明第一行1个整数m(100>m>0),表示有多少组数据。其后一行为m个正整数,表示m个整数。输出说明一行输出数列对应数据,换行。小数点后保留6位有效数字,多余部分四舍五入。输入样例3358输出样例0.6666670.6250000.617647#includedoublefun(intn){returnn==1?1:1/(1+fun(n-1));}intmain(){inta,b,c;scanf("%d",&a);for(b=0;b{scanf("%d",&c);printf("%.6f\n",fun(c));}return0;}10水仙花数描述水仙花数是指一个n位数(n≥3),它的每个位上的数字的n次幂之和等于它本身。(例如:1^3+5^3+3^3=153)。定义一个函数intfun(inta,intb),计算区间[a,b]或[b,a]的水仙花数。输入说明第一行1个整数m(100>m>0),表示有多少组数据。每行表示一组数据,每组数据由两个整数a和b构成,计算[a,b]或[b,a]间的水仙花数,a和b之间用空格分隔。输出说明输出区间[a,b]或[b,a]的水仙花数数量,换行。输入样例2310004005000输出样例42#include#includeenum{num=100};intfun(inta,intb){intk,c,d[num],i,m=0,sum=0;if(a<100)a=100;for(;a>=100&&a<=b;a++){for(c=10,k=1;a/c>0;k++)c*=10;for(i=0;i{d[i]=(a%(int)pow(10,i+1)/(int)pow(10,i));sum+=(int)pow(d[i],k);}if(sum==a)m++;sum=0;}returnm;}intmain(){inta,b,m;scanf("%d",&m);while(m--){scanf("%d%d",&a,&b);printf("%d\n",fun(a,b));}return0;}11歌德巴赫猜想描述编写函数isPrime(longn),说明如下:函数的功能是判断给定的正整数n是否为素数,函数的返回值1/0表示n是/不是素数。编写main()函数,调用isPrime()验证歌德巴赫猜想:任意一个大偶数都能分解为两个素数的和。输入说明第一行1个整数m(100>m>0),表示有多少组数据。其后一行为m个正偶数,表示m个数据。输出说明每行输出2个数据表示分解的素数(每个正偶数可能分解成多组素数和,仅输出分解值分别是最小和最大素数的一组,从小到大输出),换行。输入样例21020输出样例37317#includeintisprime(longn){intm;if(n<=1)return0;for(m=2;mif(n%m==0)return0;return1;}intmain(){intm,n;scanf("%d",&m);for(n=1;n<=m;n++){longa,b;scanf("%ld",&a);for(b=a-1;b>=2;--b)if(isprime(b)==1&&isprime(a-b)==1)break;printf("%ld%ld\n",a-b,b);}return0;}12矩阵描述请写一个程序,对于一个m行m列(2主对角线是方正从左上角到右下角的一条斜线,辅对角线是方阵从右上角到左下角的一条斜线),然后按照从大到小的顺序依次输出这些值。输入说明只有一组数据;输入数据的第一行为一个正整数,表示m;接下来为m行、每行m个整数表示方阵的元素。输出说明从大到小排列的一行整数,每个整数后跟一个空格,最后换行。输入样例4158-2631241871-3-9271317213869输出样例159145144135816044322827#includeintmain(){intm,i,j,a[20][20]={0},b[42]={0},k;scanf("%d",&m);for(i=0;ifor(j=0;jscanf("%d",&a[i][j]);b[i]+=a[i][j];if(j==m)printf("\n");}for(j=0,k=m;jfor(i=0;ib[k]+=a[i][j];for(i=0,j=0;ifor(j=m-1,i=0;ifor(i=1;i<2*m+2;++i){for(k=b[i],j=i-1;j>=0&&b[j]>k;--j)b[j+1]=b[j];if(j!=i-1)b[j+1]=k;}for(i=2*m+1;i>=0;--i)printf("%d%c",b[i],'');printf("\n");return0;}//自己做的排序,比较简单for(i=1;i<=2*m+2;i++){for(j=1;j<=2*m+2;j++)if(b[j-1]{t=b[j-1];b[j-1]=b[j];b[j]=t;}}for(j=0;j<2*m+2;j++)printf("%d",b[j]);13回文数描述若一个整数其各位数字按照正反顺序读完全相同,则称之为回文数,例如12321。判断给出的整数是否是回文数。若是,则输出该整数各位数字之和,否则输出no.输入说明输入包含多组数据,第一行为整数n表示有几组数据,其后为n行数据,每行一个整数。输出说明对每一个整数,若该整数为回文数,则输出整数各位数字之和,否则输出no,然后换行。输入样例213124输出样例5no#include#includeintmain(){inta[200]={0},b,c,d=0,m,n,i,k,p,sum=0;scanf("%d",&n);for(m=0;mscanf("%d",&b);for(k=1,c=10;b/c>0;++k)c*=10;//注意此处k与下面略有不同for(i=0,p=k-1;ia[i]=(b%(int)pow(10,i+1))/(int)pow(10,i);sum+=a[i];d+=a[i]*pow(10,p);}if(d==b)printf("%d\n",sum);elseprintf("no\n");sum=0;d=0;}return0;}#include#includeintmain(){inta[200],m,n,i,k,p,c,d=0,sum=0;scanf("%d",&m);while(m--){scanf("%d",&n);for(k=0,c=10;n/c>0;k++)c*=10;for(i=0,p=k;i
intyear,month,days;
scanf("%d%d",&year,&month);
switch(month)
case2:
if(year%4==0&&year%100!
=0||year%400==0)
days=29;
days=28;
break;
case1:
case3:
case5:
case7:
case8:
case10:
case12:
days=31;
case4:
case6:
case9:
case11:
days=30;
printf("%d\n",days);
5计算整数各位数字之和
假设n是一个由最多9位数字(d9,…,d1)组成的正整数。
编写一个程序计算n的每一位数字之和
有多组数据,输入数据第1行为整数m(m<100),表示有多少组数据,其后一行m个正整数
对每一个整数n输出它的各位数字之和后换行
63704170498
6
14
voidsum(inta)
{intx,y;
intsum=0;
for(x=100000000;x>0;x=x/10)
y=a/x;
a=a-y*x;
sum+=y;
printf("%d\n",sum);
intm,n,x;
scanf("%d",&m);
for(n=1;n<=m;++n)
{scanf("%d",&x);
sum(x);
intm,a;
for(a=1;a<=m;a++)
intsum=0,x,y,n;
y=n/x;
n=n-x*y;
6完数
请写一个程序,给出指定整数范围[a,b]内的所有完数,0一个数如果恰好等于除它本身外的所有因子之和,这个数就称为"完数"。例如6是完数,因为6=1+2+3输入说明只有一组数据,即一行上的两个整数a和b,a和b之间用空格分隔输出说明输出[a,b]内的所有完数,每个数字占一行输入样例110输出样例61别人的#include#includeintwanshu(intn){intm;intsum=0;for(m=1;mif(n%m==0)sum+=m;}if(n==sum)return1;elsereturn0;}intmain(){intm,n,i;scanf("%d%d",&m,&n);for(i=m;i<=n;++i){if(wanshu(i)==1)printf("%d\n",i);}return0;}2自己的#includevoidwanshu(intn){intm,sum=0;for(m=1;m{if(n%m==0)sum+=m;}if(sum==n)printf("%d\n",n);}intmain(){inta,b,n;scanf("%d%d",&a,&b);for(n=a;n<=b;n++)wanshu(n);printf("\n");return0;}#includeintmain(){inta,b,m,x,sum=0;scanf("%d%d",&a,&b);for(x=a;x<=b;x++){for(m=1;m{if(x%m==0)sum+=m;}if(sum==x)printf("%d\n",x);}return0;}7最大公约数描述最大公约数(GCD)指某几个整数共有因子中最大的一个,最大公约数具有如下性质,gcd(a,0)=agcd(a,1)=1因此当两个数中有一个为0时,gcd是不为0的那个整数,当两个整数互质时最大公约数为1。定义函数:intgcd(inta,intb),返回两个参数的最大公约数。并写一个主函数调用该函数,实验各种输入参数情况。输入说明多组数据,每组数据由同一行的两个正整数a和b构成(0<=a,b<10000),a和b之间用空格分隔,当a和b都为0时表示输入结束输出说明对每组数据输出其最大公约数后换行输入样例241263500输出样例261输入实例:241263500#includeintgcd(inta,intb){intn;if(a==0&&b==0)return0;if(a==0)returnb;if(b==0)returna;for(n=(a>b?b:a);a%n!=0||b%n!=0;n--);returnn;}intmain(){inta,b;while(1)//也可写为for(;;){scanf("%d%d",&a,&b);if(a==0&&b==0)break;printf("%d\n",gcd(a,b));}return0;}8角谷定理描述测试,角谷定理:输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。求经过多少次可得到自然数1。如:例如数据22的变化过程:221134175226134020105168421,数据变化次数为16。可用迭代法或递归法实现。输入说明第一行1个整数m(100>m>0),表示有多少组数据。其后一行为m个正整数,表示m个数据。输出说明一行输出1个数据变换次数后,换行输入样例3223343输出样例162730#includeintjg(intn){statici=0,m;++i;if(n==1){m=i;i=0;returnm;}else{if(n%2==0)n=n/2;elsen=n*3+1;jg(n);}}intmain(){inta,b,n;scanf("%d",&a);for(b=0;b{scanf("%d",&n);printf("%d\n",jg(n));}return0;}9递归数列描述下列给定程序中,用递归实现函数fun,其功能是:根据整型参数n,计算如下公式的值。A(1)=1,A(2)=1/(1+A(1)),A(3)=1/(1+A(2)),……,A(n)=1/(1+A(n-1))。输入说明第一行1个整数m(100>m>0),表示有多少组数据。其后一行为m个正整数,表示m个整数。输出说明一行输出数列对应数据,换行。小数点后保留6位有效数字,多余部分四舍五入。输入样例3358输出样例0.6666670.6250000.617647#includedoublefun(intn){returnn==1?1:1/(1+fun(n-1));}intmain(){inta,b,c;scanf("%d",&a);for(b=0;b{scanf("%d",&c);printf("%.6f\n",fun(c));}return0;}10水仙花数描述水仙花数是指一个n位数(n≥3),它的每个位上的数字的n次幂之和等于它本身。(例如:1^3+5^3+3^3=153)。定义一个函数intfun(inta,intb),计算区间[a,b]或[b,a]的水仙花数。输入说明第一行1个整数m(100>m>0),表示有多少组数据。每行表示一组数据,每组数据由两个整数a和b构成,计算[a,b]或[b,a]间的水仙花数,a和b之间用空格分隔。输出说明输出区间[a,b]或[b,a]的水仙花数数量,换行。输入样例2310004005000输出样例42#include#includeenum{num=100};intfun(inta,intb){intk,c,d[num],i,m=0,sum=0;if(a<100)a=100;for(;a>=100&&a<=b;a++){for(c=10,k=1;a/c>0;k++)c*=10;for(i=0;i{d[i]=(a%(int)pow(10,i+1)/(int)pow(10,i));sum+=(int)pow(d[i],k);}if(sum==a)m++;sum=0;}returnm;}intmain(){inta,b,m;scanf("%d",&m);while(m--){scanf("%d%d",&a,&b);printf("%d\n",fun(a,b));}return0;}11歌德巴赫猜想描述编写函数isPrime(longn),说明如下:函数的功能是判断给定的正整数n是否为素数,函数的返回值1/0表示n是/不是素数。编写main()函数,调用isPrime()验证歌德巴赫猜想:任意一个大偶数都能分解为两个素数的和。输入说明第一行1个整数m(100>m>0),表示有多少组数据。其后一行为m个正偶数,表示m个数据。输出说明每行输出2个数据表示分解的素数(每个正偶数可能分解成多组素数和,仅输出分解值分别是最小和最大素数的一组,从小到大输出),换行。输入样例21020输出样例37317#includeintisprime(longn){intm;if(n<=1)return0;for(m=2;mif(n%m==0)return0;return1;}intmain(){intm,n;scanf("%d",&m);for(n=1;n<=m;n++){longa,b;scanf("%ld",&a);for(b=a-1;b>=2;--b)if(isprime(b)==1&&isprime(a-b)==1)break;printf("%ld%ld\n",a-b,b);}return0;}12矩阵描述请写一个程序,对于一个m行m列(2主对角线是方正从左上角到右下角的一条斜线,辅对角线是方阵从右上角到左下角的一条斜线),然后按照从大到小的顺序依次输出这些值。输入说明只有一组数据;输入数据的第一行为一个正整数,表示m;接下来为m行、每行m个整数表示方阵的元素。输出说明从大到小排列的一行整数,每个整数后跟一个空格,最后换行。输入样例4158-2631241871-3-9271317213869输出样例159145144135816044322827#includeintmain(){intm,i,j,a[20][20]={0},b[42]={0},k;scanf("%d",&m);for(i=0;ifor(j=0;jscanf("%d",&a[i][j]);b[i]+=a[i][j];if(j==m)printf("\n");}for(j=0,k=m;jfor(i=0;ib[k]+=a[i][j];for(i=0,j=0;ifor(j=m-1,i=0;ifor(i=1;i<2*m+2;++i){for(k=b[i],j=i-1;j>=0&&b[j]>k;--j)b[j+1]=b[j];if(j!=i-1)b[j+1]=k;}for(i=2*m+1;i>=0;--i)printf("%d%c",b[i],'');printf("\n");return0;}//自己做的排序,比较简单for(i=1;i<=2*m+2;i++){for(j=1;j<=2*m+2;j++)if(b[j-1]{t=b[j-1];b[j-1]=b[j];b[j]=t;}}for(j=0;j<2*m+2;j++)printf("%d",b[j]);13回文数描述若一个整数其各位数字按照正反顺序读完全相同,则称之为回文数,例如12321。判断给出的整数是否是回文数。若是,则输出该整数各位数字之和,否则输出no.输入说明输入包含多组数据,第一行为整数n表示有几组数据,其后为n行数据,每行一个整数。输出说明对每一个整数,若该整数为回文数,则输出整数各位数字之和,否则输出no,然后换行。输入样例213124输出样例5no#include#includeintmain(){inta[200]={0},b,c,d=0,m,n,i,k,p,sum=0;scanf("%d",&n);for(m=0;mscanf("%d",&b);for(k=1,c=10;b/c>0;++k)c*=10;//注意此处k与下面略有不同for(i=0,p=k-1;ia[i]=(b%(int)pow(10,i+1))/(int)pow(10,i);sum+=a[i];d+=a[i]*pow(10,p);}if(d==b)printf("%d\n",sum);elseprintf("no\n");sum=0;d=0;}return0;}#include#includeintmain(){inta[200],m,n,i,k,p,c,d=0,sum=0;scanf("%d",&m);while(m--){scanf("%d",&n);for(k=0,c=10;n/c>0;k++)c*=10;for(i=0,p=k;i
一个数如果恰好等于除它本身外的所有因子之和,这个数就称为"完数"。
例如6是完数,因为6=1+2+3
只有一组数据,即一行上的两个整数a和b,a和b之间用空格分隔
输出[a,b]内的所有完数,每个数字占一行
110
intwanshu(intn)
intm;
for(m=1;mif(n%m==0)sum+=m;}if(n==sum)return1;elsereturn0;}intmain(){intm,n,i;scanf("%d%d",&m,&n);for(i=m;i<=n;++i){if(wanshu(i)==1)printf("%d\n",i);}return0;}2自己的#includevoidwanshu(intn){intm,sum=0;for(m=1;m{if(n%m==0)sum+=m;}if(sum==n)printf("%d\n",n);}intmain(){inta,b,n;scanf("%d%d",&a,&b);for(n=a;n<=b;n++)wanshu(n);printf("\n");return0;}#includeintmain(){inta,b,m,x,sum=0;scanf("%d%d",&a,&b);for(x=a;x<=b;x++){for(m=1;m{if(x%m==0)sum+=m;}if(sum==x)printf("%d\n",x);}return0;}7最大公约数描述最大公约数(GCD)指某几个整数共有因子中最大的一个,最大公约数具有如下性质,gcd(a,0)=agcd(a,1)=1因此当两个数中有一个为0时,gcd是不为0的那个整数,当两个整数互质时最大公约数为1。定义函数:intgcd(inta,intb),返回两个参数的最大公约数。并写一个主函数调用该函数,实验各种输入参数情况。输入说明多组数据,每组数据由同一行的两个正整数a和b构成(0<=a,b<10000),a和b之间用空格分隔,当a和b都为0时表示输入结束输出说明对每组数据输出其最大公约数后换行输入样例241263500输出样例261输入实例:241263500#includeintgcd(inta,intb){intn;if(a==0&&b==0)return0;if(a==0)returnb;if(b==0)returna;for(n=(a>b?b:a);a%n!=0||b%n!=0;n--);returnn;}intmain(){inta,b;while(1)//也可写为for(;;){scanf("%d%d",&a,&b);if(a==0&&b==0)break;printf("%d\n",gcd(a,b));}return0;}8角谷定理描述测试,角谷定理:输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。求经过多少次可得到自然数1。如:例如数据22的变化过程:221134175226134020105168421,数据变化次数为16。可用迭代法或递归法实现。输入说明第一行1个整数m(100>m>0),表示有多少组数据。其后一行为m个正整数,表示m个数据。输出说明一行输出1个数据变换次数后,换行输入样例3223343输出样例162730#includeintjg(intn){statici=0,m;++i;if(n==1){m=i;i=0;returnm;}else{if(n%2==0)n=n/2;elsen=n*3+1;jg(n);}}intmain(){inta,b,n;scanf("%d",&a);for(b=0;b{scanf("%d",&n);printf("%d\n",jg(n));}return0;}9递归数列描述下列给定程序中,用递归实现函数fun,其功能是:根据整型参数n,计算如下公式的值。A(1)=1,A(2)=1/(1+A(1)),A(3)=1/(1+A(2)),……,A(n)=1/(1+A(n-1))。输入说明第一行1个整数m(100>m>0),表示有多少组数据。其后一行为m个正整数,表示m个整数。输出说明一行输出数列对应数据,换行。小数点后保留6位有效数字,多余部分四舍五入。输入样例3358输出样例0.6666670.6250000.617647#includedoublefun(intn){returnn==1?1:1/(1+fun(n-1));}intmain(){inta,b,c;scanf("%d",&a);for(b=0;b{scanf("%d",&c);printf("%.6f\n",fun(c));}return0;}10水仙花数描述水仙花数是指一个n位数(n≥3),它的每个位上的数字的n次幂之和等于它本身。(例如:1^3+5^3+3^3=153)。定义一个函数intfun(inta,intb),计算区间[a,b]或[b,a]的水仙花数。输入说明第一行1个整数m(100>m>0),表示有多少组数据。每行表示一组数据,每组数据由两个整数a和b构成,计算[a,b]或[b,a]间的水仙花数,a和b之间用空格分隔。输出说明输出区间[a,b]或[b,a]的水仙花数数量,换行。输入样例2310004005000输出样例42#include#includeenum{num=100};intfun(inta,intb){intk,c,d[num],i,m=0,sum=0;if(a<100)a=100;for(;a>=100&&a<=b;a++){for(c=10,k=1;a/c>0;k++)c*=10;for(i=0;i{d[i]=(a%(int)pow(10,i+1)/(int)pow(10,i));sum+=(int)pow(d[i],k);}if(sum==a)m++;sum=0;}returnm;}intmain(){inta,b,m;scanf("%d",&m);while(m--){scanf("%d%d",&a,&b);printf("%d\n",fun(a,b));}return0;}11歌德巴赫猜想描述编写函数isPrime(longn),说明如下:函数的功能是判断给定的正整数n是否为素数,函数的返回值1/0表示n是/不是素数。编写main()函数,调用isPrime()验证歌德巴赫猜想:任意一个大偶数都能分解为两个素数的和。输入说明第一行1个整数m(100>m>0),表示有多少组数据。其后一行为m个正偶数,表示m个数据。输出说明每行输出2个数据表示分解的素数(每个正偶数可能分解成多组素数和,仅输出分解值分别是最小和最大素数的一组,从小到大输出),换行。输入样例21020输出样例37317#includeintisprime(longn){intm;if(n<=1)return0;for(m=2;mif(n%m==0)return0;return1;}intmain(){intm,n;scanf("%d",&m);for(n=1;n<=m;n++){longa,b;scanf("%ld",&a);for(b=a-1;b>=2;--b)if(isprime(b)==1&&isprime(a-b)==1)break;printf("%ld%ld\n",a-b,b);}return0;}12矩阵描述请写一个程序,对于一个m行m列(2主对角线是方正从左上角到右下角的一条斜线,辅对角线是方阵从右上角到左下角的一条斜线),然后按照从大到小的顺序依次输出这些值。输入说明只有一组数据;输入数据的第一行为一个正整数,表示m;接下来为m行、每行m个整数表示方阵的元素。输出说明从大到小排列的一行整数,每个整数后跟一个空格,最后换行。输入样例4158-2631241871-3-9271317213869输出样例159145144135816044322827#includeintmain(){intm,i,j,a[20][20]={0},b[42]={0},k;scanf("%d",&m);for(i=0;ifor(j=0;jscanf("%d",&a[i][j]);b[i]+=a[i][j];if(j==m)printf("\n");}for(j=0,k=m;jfor(i=0;ib[k]+=a[i][j];for(i=0,j=0;ifor(j=m-1,i=0;ifor(i=1;i<2*m+2;++i){for(k=b[i],j=i-1;j>=0&&b[j]>k;--j)b[j+1]=b[j];if(j!=i-1)b[j+1]=k;}for(i=2*m+1;i>=0;--i)printf("%d%c",b[i],'');printf("\n");return0;}//自己做的排序,比较简单for(i=1;i<=2*m+2;i++){for(j=1;j<=2*m+2;j++)if(b[j-1]{t=b[j-1];b[j-1]=b[j];b[j]=t;}}for(j=0;j<2*m+2;j++)printf("%d",b[j]);13回文数描述若一个整数其各位数字按照正反顺序读完全相同,则称之为回文数,例如12321。判断给出的整数是否是回文数。若是,则输出该整数各位数字之和,否则输出no.输入说明输入包含多组数据,第一行为整数n表示有几组数据,其后为n行数据,每行一个整数。输出说明对每一个整数,若该整数为回文数,则输出整数各位数字之和,否则输出no,然后换行。输入样例213124输出样例5no#include#includeintmain(){inta[200]={0},b,c,d=0,m,n,i,k,p,sum=0;scanf("%d",&n);for(m=0;mscanf("%d",&b);for(k=1,c=10;b/c>0;++k)c*=10;//注意此处k与下面略有不同for(i=0,p=k-1;ia[i]=(b%(int)pow(10,i+1))/(int)pow(10,i);sum+=a[i];d+=a[i]*pow(10,p);}if(d==b)printf("%d\n",sum);elseprintf("no\n");sum=0;d=0;}return0;}#include#includeintmain(){inta[200],m,n,i,k,p,c,d=0,sum=0;scanf("%d",&m);while(m--){scanf("%d",&n);for(k=0,c=10;n/c>0;k++)c*=10;for(i=0,p=k;i
if(n%m==0)
sum+=m;
if(n==sum)return1;
intm,n,i;
scanf("%d%d",&m,&n);
for(i=m;i<=n;++i){
if(wanshu(i)==1)printf("%d\n",i);
voidwanshu(intn)
intm,sum=0;
for(m=1;m{if(n%m==0)sum+=m;}if(sum==n)printf("%d\n",n);}intmain(){inta,b,n;scanf("%d%d",&a,&b);for(n=a;n<=b;n++)wanshu(n);printf("\n");return0;}#includeintmain(){inta,b,m,x,sum=0;scanf("%d%d",&a,&b);for(x=a;x<=b;x++){for(m=1;m{if(x%m==0)sum+=m;}if(sum==x)printf("%d\n",x);}return0;}7最大公约数描述最大公约数(GCD)指某几个整数共有因子中最大的一个,最大公约数具有如下性质,gcd(a,0)=agcd(a,1)=1因此当两个数中有一个为0时,gcd是不为0的那个整数,当两个整数互质时最大公约数为1。定义函数:intgcd(inta,intb),返回两个参数的最大公约数。并写一个主函数调用该函数,实验各种输入参数情况。输入说明多组数据,每组数据由同一行的两个正整数a和b构成(0<=a,b<10000),a和b之间用空格分隔,当a和b都为0时表示输入结束输出说明对每组数据输出其最大公约数后换行输入样例241263500输出样例261输入实例:241263500#includeintgcd(inta,intb){intn;if(a==0&&b==0)return0;if(a==0)returnb;if(b==0)returna;for(n=(a>b?b:a);a%n!=0||b%n!=0;n--);returnn;}intmain(){inta,b;while(1)//也可写为for(;;){scanf("%d%d",&a,&b);if(a==0&&b==0)break;printf("%d\n",gcd(a,b));}return0;}8角谷定理描述测试,角谷定理:输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。求经过多少次可得到自然数1。如:例如数据22的变化过程:221134175226134020105168421,数据变化次数为16。可用迭代法或递归法实现。输入说明第一行1个整数m(100>m>0),表示有多少组数据。其后一行为m个正整数,表示m个数据。输出说明一行输出1个数据变换次数后,换行输入样例3223343输出样例162730#includeintjg(intn){statici=0,m;++i;if(n==1){m=i;i=0;returnm;}else{if(n%2==0)n=n/2;elsen=n*3+1;jg(n);}}intmain(){inta,b,n;scanf("%d",&a);for(b=0;b{scanf("%d",&n);printf("%d\n",jg(n));}return0;}9递归数列描述下列给定程序中,用递归实现函数fun,其功能是:根据整型参数n,计算如下公式的值。A(1)=1,A(2)=1/(1+A(1)),A(3)=1/(1+A(2)),……,A(n)=1/(1+A(n-1))。输入说明第一行1个整数m(100>m>0),表示有多少组数据。其后一行为m个正整数,表示m个整数。输出说明一行输出数列对应数据,换行。小数点后保留6位有效数字,多余部分四舍五入。输入样例3358输出样例0.6666670.6250000.617647#includedoublefun(intn){returnn==1?1:1/(1+fun(n-1));}intmain(){inta,b,c;scanf("%d",&a);for(b=0;b{scanf("%d",&c);printf("%.6f\n",fun(c));}return0;}10水仙花数描述水仙花数是指一个n位数(n≥3),它的每个位上的数字的n次幂之和等于它本身。(例如:1^3+5^3+3^3=153)。定义一个函数intfun(inta,intb),计算区间[a,b]或[b,a]的水仙花数。输入说明第一行1个整数m(100>m>0),表示有多少组数据。每行表示一组数据,每组数据由两个整数a和b构成,计算[a,b]或[b,a]间的水仙花数,a和b之间用空格分隔。输出说明输出区间[a,b]或[b,a]的水仙花数数量,换行。输入样例2310004005000输出样例42#include#includeenum{num=100};intfun(inta,intb){intk,c,d[num],i,m=0,sum=0;if(a<100)a=100;for(;a>=100&&a<=b;a++){for(c=10,k=1;a/c>0;k++)c*=10;for(i=0;i{d[i]=(a%(int)pow(10,i+1)/(int)pow(10,i));sum+=(int)pow(d[i],k);}if(sum==a)m++;sum=0;}returnm;}intmain(){inta,b,m;scanf("%d",&m);while(m--){scanf("%d%d",&a,&b);printf("%d\n",fun(a,b));}return0;}11歌德巴赫猜想描述编写函数isPrime(longn),说明如下:函数的功能是判断给定的正整数n是否为素数,函数的返回值1/0表示n是/不是素数。编写main()函数,调用isPrime()验证歌德巴赫猜想:任意一个大偶数都能分解为两个素数的和。输入说明第一行1个整数m(100>m>0),表示有多少组数据。其后一行为m个正偶数,表示m个数据。输出说明每行输出2个数据表示分解的素数(每个正偶数可能分解成多组素数和,仅输出分解值分别是最小和最大素数的一组,从小到大输出),换行。输入样例21020输出样例37317#includeintisprime(longn){intm;if(n<=1)return0;for(m=2;mif(n%m==0)return0;return1;}intmain(){intm,n;scanf("%d",&m);for(n=1;n<=m;n++){longa,b;scanf("%ld",&a);for(b=a-1;b>=2;--b)if(isprime(b)==1&&isprime(a-b)==1)break;printf("%ld%ld\n",a-b,b);}return0;}12矩阵描述请写一个程序,对于一个m行m列(2主对角线是方正从左上角到右下角的一条斜线,辅对角线是方阵从右上角到左下角的一条斜线),然后按照从大到小的顺序依次输出这些值。输入说明只有一组数据;输入数据的第一行为一个正整数,表示m;接下来为m行、每行m个整数表示方阵的元素。输出说明从大到小排列的一行整数,每个整数后跟一个空格,最后换行。输入样例4158-2631241871-3-9271317213869输出样例159145144135816044322827#includeintmain(){intm,i,j,a[20][20]={0},b[42]={0},k;scanf("%d",&m);for(i=0;ifor(j=0;jscanf("%d",&a[i][j]);b[i]+=a[i][j];if(j==m)printf("\n");}for(j=0,k=m;jfor(i=0;ib[k]+=a[i][j];for(i=0,j=0;ifor(j=m-1,i=0;ifor(i=1;i<2*m+2;++i){for(k=b[i],j=i-1;j>=0&&b[j]>k;--j)b[j+1]=b[j];if(j!=i-1)b[j+1]=k;}for(i=2*m+1;i>=0;--i)printf("%d%c",b[i],'');printf("\n");return0;}//自己做的排序,比较简单for(i=1;i<=2*m+2;i++){for(j=1;j<=2*m+2;j++)if(b[j-1]{t=b[j-1];b[j-1]=b[j];b[j]=t;}}for(j=0;j<2*m+2;j++)printf("%d",b[j]);13回文数描述若一个整数其各位数字按照正反顺序读完全相同,则称之为回文数,例如12321。判断给出的整数是否是回文数。若是,则输出该整数各位数字之和,否则输出no.输入说明输入包含多组数据,第一行为整数n表示有几组数据,其后为n行数据,每行一个整数。输出说明对每一个整数,若该整数为回文数,则输出整数各位数字之和,否则输出no,然后换行。输入样例213124输出样例5no#include#includeintmain(){inta[200]={0},b,c,d=0,m,n,i,k,p,sum=0;scanf("%d",&n);for(m=0;mscanf("%d",&b);for(k=1,c=10;b/c>0;++k)c*=10;//注意此处k与下面略有不同for(i=0,p=k-1;ia[i]=(b%(int)pow(10,i+1))/(int)pow(10,i);sum+=a[i];d+=a[i]*pow(10,p);}if(d==b)printf("%d\n",sum);elseprintf("no\n");sum=0;d=0;}return0;}#include#includeintmain(){inta[200],m,n,i,k,p,c,d=0,sum=0;scanf("%d",&m);while(m--){scanf("%d",&n);for(k=0,c=10;n/c>0;k++)c*=10;for(i=0,p=k;i
if(sum==n)
printf("%d\n",n);
inta,b,n;
for(n=a;n<=b;n++)
wanshu(n);
printf("\n");
inta,b,m,x,sum=0;
for(x=a;x<=b;x++)
for(m=1;m{if(x%m==0)sum+=m;}if(sum==x)printf("%d\n",x);}return0;}7最大公约数描述最大公约数(GCD)指某几个整数共有因子中最大的一个,最大公约数具有如下性质,gcd(a,0)=agcd(a,1)=1因此当两个数中有一个为0时,gcd是不为0的那个整数,当两个整数互质时最大公约数为1。定义函数:intgcd(inta,intb),返回两个参数的最大公约数。并写一个主函数调用该函数,实验各种输入参数情况。输入说明多组数据,每组数据由同一行的两个正整数a和b构成(0<=a,b<10000),a和b之间用空格分隔,当a和b都为0时表示输入结束输出说明对每组数据输出其最大公约数后换行输入样例241263500输出样例261输入实例:241263500#includeintgcd(inta,intb){intn;if(a==0&&b==0)return0;if(a==0)returnb;if(b==0)returna;for(n=(a>b?b:a);a%n!=0||b%n!=0;n--);returnn;}intmain(){inta,b;while(1)//也可写为for(;;){scanf("%d%d",&a,&b);if(a==0&&b==0)break;printf("%d\n",gcd(a,b));}return0;}8角谷定理描述测试,角谷定理:输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。求经过多少次可得到自然数1。如:例如数据22的变化过程:221134175226134020105168421,数据变化次数为16。可用迭代法或递归法实现。输入说明第一行1个整数m(100>m>0),表示有多少组数据。其后一行为m个正整数,表示m个数据。输出说明一行输出1个数据变换次数后,换行输入样例3223343输出样例162730#includeintjg(intn){statici=0,m;++i;if(n==1){m=i;i=0;returnm;}else{if(n%2==0)n=n/2;elsen=n*3+1;jg(n);}}intmain(){inta,b,n;scanf("%d",&a);for(b=0;b{scanf("%d",&n);printf("%d\n",jg(n));}return0;}9递归数列描述下列给定程序中,用递归实现函数fun,其功能是:根据整型参数n,计算如下公式的值。A(1)=1,A(2)=1/(1+A(1)),A(3)=1/(1+A(2)),……,A(n)=1/(1+A(n-1))。输入说明第一行1个整数m(100>m>0),表示有多少组数据。其后一行为m个正整数,表示m个整数。输出说明一行输出数列对应数据,换行。小数点后保留6位有效数字,多余部分四舍五入。输入样例3358输出样例0.6666670.6250000.617647#includedoublefun(intn){returnn==1?1:1/(1+fun(n-1));}intmain(){inta,b,c;scanf("%d",&a);for(b=0;b{scanf("%d",&c);printf("%.6f\n",fun(c));}return0;}10水仙花数描述水仙花数是指一个n位数(n≥3),它的每个位上的数字的n次幂之和等于它本身。(例如:1^3+5^3+3^3=153)。定义一个函数intfun(inta,intb),计算区间[a,b]或[b,a]的水仙花数。输入说明第一行1个整数m(100>m>0),表示有多少组数据。每行表示一组数据,每组数据由两个整数a和b构成,计算[a,b]或[b,a]间的水仙花数,a和b之间用空格分隔。输出说明输出区间[a,b]或[b,a]的水仙花数数量,换行。输入样例2310004005000输出样例42#include#includeenum{num=100};intfun(inta,intb){intk,c,d[num],i,m=0,sum=0;if(a<100)a=100;for(;a>=100&&a<=b;a++){for(c=10,k=1;a/c>0;k++)c*=10;for(i=0;i{d[i]=(a%(int)pow(10,i+1)/(int)pow(10,i));sum+=(int)pow(d[i],k);}if(sum==a)m++;sum=0;}returnm;}intmain(){inta,b,m;scanf("%d",&m);while(m--){scanf("%d%d",&a,&b);printf("%d\n",fun(a,b));}return0;}11歌德巴赫猜想描述编写函数isPrime(longn),说明如下:函数的功能是判断给定的正整数n是否为素数,函数的返回值1/0表示n是/不是素数。编写main()函数,调用isPrime()验证歌德巴赫猜想:任意一个大偶数都能分解为两个素数的和。输入说明第一行1个整数m(100>m>0),表示有多少组数据。其后一行为m个正偶数,表示m个数据。输出说明每行输出2个数据表示分解的素数(每个正偶数可能分解成多组素数和,仅输出分解值分别是最小和最大素数的一组,从小到大输出),换行。输入样例21020输出样例37317#includeintisprime(longn){intm;if(n<=1)return0;for(m=2;mif(n%m==0)return0;return1;}intmain(){intm,n;scanf("%d",&m);for(n=1;n<=m;n++){longa,b;scanf("%ld",&a);for(b=a-1;b>=2;--b)if(isprime(b)==1&&isprime(a-b)==1)break;printf("%ld%ld\n",a-b,b);}return0;}12矩阵描述请写一个程序,对于一个m行m列(2主对角线是方正从左上角到右下角的一条斜线,辅对角线是方阵从右上角到左下角的一条斜线),然后按照从大到小的顺序依次输出这些值。输入说明只有一组数据;输入数据的第一行为一个正整数,表示m;接下来为m行、每行m个整数表示方阵的元素。输出说明从大到小排列的一行整数,每个整数后跟一个空格,最后换行。输入样例4158-2631241871-3-9271317213869输出样例159145144135816044322827#includeintmain(){intm,i,j,a[20][20]={0},b[42]={0},k;scanf("%d",&m);for(i=0;ifor(j=0;jscanf("%d",&a[i][j]);b[i]+=a[i][j];if(j==m)printf("\n");}for(j=0,k=m;jfor(i=0;ib[k]+=a[i][j];for(i=0,j=0;ifor(j=m-1,i=0;ifor(i=1;i<2*m+2;++i){for(k=b[i],j=i-1;j>=0&&b[j]>k;--j)b[j+1]=b[j];if(j!=i-1)b[j+1]=k;}for(i=2*m+1;i>=0;--i)printf("%d%c",b[i],'');printf("\n");return0;}//自己做的排序,比较简单for(i=1;i<=2*m+2;i++){for(j=1;j<=2*m+2;j++)if(b[j-1]{t=b[j-1];b[j-1]=b[j];b[j]=t;}}for(j=0;j<2*m+2;j++)printf("%d",b[j]);13回文数描述若一个整数其各位数字按照正反顺序读完全相同,则称之为回文数,例如12321。判断给出的整数是否是回文数。若是,则输出该整数各位数字之和,否则输出no.输入说明输入包含多组数据,第一行为整数n表示有几组数据,其后为n行数据,每行一个整数。输出说明对每一个整数,若该整数为回文数,则输出整数各位数字之和,否则输出no,然后换行。输入样例213124输出样例5no#include#includeintmain(){inta[200]={0},b,c,d=0,m,n,i,k,p,sum=0;scanf("%d",&n);for(m=0;mscanf("%d",&b);for(k=1,c=10;b/c>0;++k)c*=10;//注意此处k与下面略有不同for(i=0,p=k-1;ia[i]=(b%(int)pow(10,i+1))/(int)pow(10,i);sum+=a[i];d+=a[i]*pow(10,p);}if(d==b)printf("%d\n",sum);elseprintf("no\n");sum=0;d=0;}return0;}#include#includeintmain(){inta[200],m,n,i,k,p,c,d=0,sum=0;scanf("%d",&m);while(m--){scanf("%d",&n);for(k=0,c=10;n/c>0;k++)c*=10;for(i=0,p=k;i
if(x%m==0)
if(sum==x)
printf("%d\n",x);
7最大公约数
最大公约数(GCD)指某几个整数共有因子中最大的一个,最大公约数具有如下性质,
gcd(a,0)=a
gcd(a,1)=1
因此当两个数中有一个为0时,gcd是不为0的那个整数,当两个整数互质时最大公约数为1。
定义函数:
intgcd(inta,intb),返回两个参数的最大公约数。
并写一个主函数调用该函数,实验各种输入参数情况。
多组数据,每组数据由同一行的两个正整数a和b构成(0<=a,b<10000),a和b之间用空格分隔,当a和b都为0时表示输入结束
对每组数据输出其最大公约数后换行
24
126
35
00
2
1
输入实例:
241263500
intgcd(inta,intb)
intn;
if(a==0&&b==0)
if(a==0)
returnb;
if(b==0)
returna;
for(n=(a>b?
b:
a);a%n!
=0||b%n!
=0;n--)
;
while
(1)//也可写为for(;;)
printf("%d\n",gcd(a,b));
8角谷定理
测试,
角谷定理:
输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。
经过如此有限次运算后,总可以得到自然数值1。
求经过多少次可得到自然数1。
如:
例如数据22的变化过程:
221134175226134020105168421,数据变化次数为16。
可用迭代法或递归法实现。
第一行1个整数m(100>m>0),表示有多少组数据。
其后一行为m个正整数,表示m个数据。
一行输出1个数据变换次数后,换行
223343
16
27
30
intjg(intn)
statici=0,m;
++i;
if(n==1)
m=i;
i=0;
returnm;
if(n%2==0)
n=n/2;
n=n*3+1;
jg(n);
for(b=0;b{scanf("%d",&n);printf("%d\n",jg(n));}return0;}9递归数列描述下列给定程序中,用递归实现函数fun,其功能是:根据整型参数n,计算如下公式的值。A(1)=1,A(2)=1/(1+A(1)),A(3)=1/(1+A(2)),……,A(n)=1/(1+A(n-1))。输入说明第一行1个整数m(100>m>0),表示有多少组数据。其后一行为m个正整数,表示m个整数。输出说明一行输出数列对应数据,换行。小数点后保留6位有效数字,多余部分四舍五入。输入样例3358输出样例0.6666670.6250000.617647#includedoublefun(intn){returnn==1?1:1/(1+fun(n-1));}intmain(){inta,b,c;scanf("%d",&a);for(b=0;b{scanf("%d",&c);printf("%.6f\n",fun(c));}return0;}10水仙花数描述水仙花数是指一个n位数(n≥3),它的每个位上的数字的n次幂之和等于它本身。(例如:1^3+5^3+3^3=153)。定义一个函数intfun(inta,intb),计算区间[a,b]或[b,a]的水仙花数。输入说明第一行1个整数m(100>m>0),表示有多少组数据。每行表示一组数据,每组数据由两个整数a和b构成,计算[a,b]或[b,a]间的水仙花数,a和b之间用空格分隔。输出说明输出区间[a,b]或[b,a]的水仙花数数量,换行。输入样例2310004005000输出样例42#include#includeenum{num=100};intfun(inta,intb){intk,c,d[num],i,m=0,sum=0;if(a<100)a=100;for(;a>=100&&a<=b;a++){for(c=10,k=1;a/c>0;k++)c*=10;for(i=0;i{d[i]=(a%(int)pow(10,i+1)/(int)pow(10,i));sum+=(int)pow(d[i],k);}if(sum==a)m++;sum=0;}returnm;}intmain(){inta,b,m;scanf("%d",&m);while(m--){scanf("%d%d",&a,&b);printf("%d\n",fun(a,b));}return0;}11歌德巴赫猜想描述编写函数isPrime(longn),说明如下:函数的功能是判断给定的正整数n是否为素数,函数的返回值1/0表示n是/不是素数。编写main()函数,调用isPrime()验证歌德巴赫猜想:任意一个大偶数都能分解为两个素数的和。输入说明第一行1个整数m(100>m>0),表示有多少组数据。其后一行为m个正偶数,表示m个数据。输出说明每行输出2个数据表示分解的素数(每个正偶数可能分解成多组素数和,仅输出分解值分别是最小和最大素数的一组,从小到大输出),换行。输入样例21020输出样例37317#includeintisprime(longn){intm;if(n<=1)return0;for(m=2;mif(n%m==0)return0;return1;}intmain(){intm,n;scanf("%d",&m);for(n=1;n<=m;n++){longa,b;scanf("%ld",&a);for(b=a-1;b>=2;--b)if(isprime(b)==1&&isprime(a-b)==1)break;printf("%ld%ld\n",a-b,b);}return0;}12矩阵描述请写一个程序,对于一个m行m列(2主对角线是方正从左上角到右下角的一条斜线,辅对角线是方阵从右上角到左下角的一条斜线),然后按照从大到小的顺序依次输出这些值。输入说明只有一组数据;输入数据的第一行为一个正整数,表示m;接下来为m行、每行m个整数表示方阵的元素。输出说明从大到小排列的一行整数,每个整数后跟一个空格,最后换行。输入样例4158-2631241871-3-9271317213869输出样例159145144135816044322827#includeintmain(){intm,i,j,a[20][20]={0},b[42]={0},k;scanf("%d",&m);for(i=0;ifor(j=0;jscanf("%d",&a[i][j]);b[i]+=a[i][j];if(j==m)printf("\n");}for(j=0,k=m;jfor(i=0;ib[k]+=a[i][j];for(i=0,j=0;ifor(j=m-1,i=0;ifor(i=1;i<2*m+2;++i){for(k=b[i],j=i-1;j>=0&&b[j]>k;--j)b[j+1]=b[j];if(j!=i-1)b[j+1]=k;}for(i=2*m+1;i>=0;--i)printf("%d%c",b[i],'');printf("\n");return0;}//自己做的排序,比较简单for(i=1;i<=2*m+2;i++){for(j=1;j<=2*m+2;j++)if(b[j-1]{t=b[j-1];b[j-1]=b[j];b[j]=t;}}for(j=0;j<2*m+2;j++)printf("%d",b[j]);13回文数描述若一个整数其各位数字按照正反顺序读完全相同,则称之为回文数,例如12321。判断给出的整数是否是回文数。若是,则输出该整数各位数字之和,否则输出no.输入说明输入包含多组数据,第一行为整数n表示有几组数据,其后为n行数据,每行一个整数。输出说明对每一个整数,若该整数为回文数,则输出整数各位数字之和,否则输出no,然后换行。输入样例213124输出样例5no#include#includeintmain(){inta[200]={0},b,c,d=0,m,n,i,k,p,sum=0;scanf("%d",&n);for(m=0;mscanf("%d",&b);for(k=1,c=10;b/c>0;++k)c*=10;//注意此处k与下面略有不同for(i=0,p=k-1;ia[i]=(b%(int)pow(10,i+1))/(int)pow(10,i);sum+=a[i];d+=a[i]*pow(10,p);}if(d==b)printf("%d\n",sum);elseprintf("no\n");sum=0;d=0;}return0;}#include#includeintmain(){inta[200],m,n,i,k,p,c,d=0,sum=0;scanf("%d",&m);while(m--){scanf("%d",&n);for(k=0,c=10;n/c>0;k++)c*=10;for(i=0,p=k;i
printf("%d\n",jg(n));
9递归数列
下列给定程序中,用递归实现函数fun,其功能是:
根据整型参数n,计算如下公式的值。
A
(1)=1,A
(2)=1/(1+A
(1)),A(3)=1/(1+A
(2)),……,A(n)=1/(1+A(n-1))。
其后一行为m个正整数,表示m个整数。
一行输出数列对应数据,换行。
小数点后保留6位有效数字,多余部分四舍五入。
358
0.666667
0.625000
0.617647
doublefun(intn)
returnn==1?
1:
1/(1+fun(n-1));
inta,b,c;
for(b=0;b{scanf("%d",&c);printf("%.6f\n",fun(c));}return0;}10水仙花数描述水仙花数是指一个n位数(n≥3),它的每个位上的数字的n次幂之和等于它本身。(例如:1^3+5^3+3^3=153)。定义一个函数intfun(inta,intb),计算区间[a,b]或[b,a]的水仙花数。输入说明第一行1个整数m(100>m>0),表示有多少组数据。每行表示一组数据,每组数据由两个整数a和b构成,计算[a,b]或[b,a]间的水仙花数,a和b之间用空格分隔。输出说明输出区间[a,b]或[b,a]的水仙花数数量,换行。输入样例2310004005000输出样例42#include#includeenum{num=100};intfun(inta,intb){intk,c,d[num],i,m=0,sum=0;if(a<100)a=100;for(;a>=100&&a<=b;a++){for(c=10,k=1;a/c>0;k++)c*=10;for(i=0;i{d[i]=(a%(int)pow(10,i+1)/(int)pow(10,i));sum+=(int)pow(d[i],k);}if(sum==a)m++;sum=0;}returnm;}intmain(){inta,b,m;scanf("%d",&m);while(m--){scanf("%d%d",&a,&b);printf("%d\n",fun(a,b));}return0;}11歌德巴赫猜想描述编写函数isPrime(longn),说明如下:函数的功能是判断给定的正整数n是否为素数,函数的返回值1/0表示n是/不是素数。编写main()函数,调用isPrime()验证歌德巴赫猜想:任意一个大偶数都能分解为两个素数的和。输入说明第一行1个整数m(100>m>0),表示有多少组数据。其后一行为m个正偶数,表示m个数据。输出说明每行输出2个数据表示分解的素数(每个正偶数可能分解成多组素数和,仅输出分解值分别是最小和最大素数的一组,从小到大输出),换行。输入样例21020输出样例37317#includeintisprime(longn){intm;if(n<=1)return0;for(m=2;mif(n%m==0)return0;return1;}intmain(){intm,n;scanf("%d",&m);for(n=1;n<=m;n++){longa,b;scanf("%ld",&a);for(b=a-1;b>=2;--b)if(isprime(b)==1&&isprime(a-b)==1)break;printf("%ld%ld\n",a-b,b);}return0;}12矩阵描述请写一个程序,对于一个m行m列(2主对角线是方正从左上角到右下角的一条斜线,辅对角线是方阵从右上角到左下角的一条斜线),然后按照从大到小的顺序依次输出这些值。输入说明只有一组数据;输入数据的第一行为一个正整数,表示m;接下来为m行、每行m个整数表示方阵的元素。输出说明从大到小排列的一行整数,每个整数后跟一个空格,最后换行。输入样例4158-2631241871-3-9271317213869输出样例159145144135816044322827#includeintmain(){intm,i,j,a[20][20]={0},b[42]={0},k;scanf("%d",&m);for(i=0;ifor(j=0;jscanf("%d",&a[i][j]);b[i]+=a[i][j];if(j==m)printf("\n");}for(j=0,k=m;jfor(i=0;ib[k]+=a[i][j];for(i=0,j=0;ifor(j=m-1,i=0;ifor(i=1;i<2*m+2;++i){for(k=b[i],j=i-1;j>=0&&b[j]>k;--j)b[j+1]=b[j];if(j!=i-1)b[j+1]=k;}for(i=2*m+1;i>=0;--i)printf("%d%c",b[i],'');printf("\n");return0;}//自己做的排序,比较简单for(i=1;i<=2*m+2;i++){for(j=1;j<=2*m+2;j++)if(b[j-1]{t=b[j-1];b[j-1]=b[j];b[j]=t;}}for(j=0;j<2*m+2;j++)printf("%d",b[j]);13回文数描述若一个整数其各位数字按照正反顺序读完全相同,则称之为回文数,例如12321。判断给出的整数是否是回文数。若是,则输出该整数各位数字之和,否则输出no.输入说明输入包含多组数据,第一行为整数n表示有几组数据,其后为n行数据,每行一个整数。输出说明对每一个整数,若该整数为回文数,则输出整数各位数字之和,否则输出no,然后换行。输入样例213124输出样例5no#include#includeintmain(){inta[200]={0},b,c,d=0,m,n,i,k,p,sum=0;scanf("%d",&n);for(m=0;mscanf("%d",&b);for(k=1,c=10;b/c>0;++k)c*=10;//注意此处k与下面略有不同for(i=0,p=k-1;ia[i]=(b%(int)pow(10,i+1))/(int)pow(10,i);sum+=a[i];d+=a[i]*pow(10,p);}if(d==b)printf("%d\n",sum);elseprintf("no\n");sum=0;d=0;}return0;}#include#includeintmain(){inta[200],m,n,i,k,p,c,d=0,sum=0;scanf("%d",&m);while(m--){scanf("%d",&n);for(k=0,c=10;n/c>0;k++)c*=10;for(i=0,p=k;i
scanf("%d",&c);
printf("%.6f\n",fun(c));
10水仙花数
水仙花数是指一个n位数(n≥3),它的每个位上的数字的n次幂之和等于它本身。
(例如:
1^3+5^3+3^3=153)。
定义一个函数intfun(inta,intb),计算区间[a,b]或[b,a]的水仙花数。
每行表示一组数据,每组数据由两个整数a和b构成,计算[a,b]或[b,a]间的水仙花数,a和b之间用空格分隔。
输出区间[a,b]或[b,a]的水仙花数数量,换行。
31000
4005000
4
enum{num=100};
intfun(inta,intb){
intk,c,d[num],i,m=0,sum=0;
if(a<100)
a=100;
for(;a>=100&&a<=b;a++)
for(c=10,k=1;a/c>0;k++)
c*=10;
for(i=0;i{d[i]=(a%(int)pow(10,i+1)/(int)pow(10,i));sum+=(int)pow(d[i],k);}if(sum==a)m++;sum=0;}returnm;}intmain(){inta,b,m;scanf("%d",&m);while(m--){scanf("%d%d",&a,&b);printf("%d\n",fun(a,b));}return0;}11歌德巴赫猜想描述编写函数isPrime(longn),说明如下:函数的功能是判断给定的正整数n是否为素数,函数的返回值1/0表示n是/不是素数。编写main()函数,调用isPrime()验证歌德巴赫猜想:任意一个大偶数都能分解为两个素数的和。输入说明第一行1个整数m(100>m>0),表示有多少组数据。其后一行为m个正偶数,表示m个数据。输出说明每行输出2个数据表示分解的素数(每个正偶数可能分解成多组素数和,仅输出分解值分别是最小和最大素数的一组,从小到大输出),换行。输入样例21020输出样例37317#includeintisprime(longn){intm;if(n<=1)return0;for(m=2;mif(n%m==0)return0;return1;}intmain(){intm,n;scanf("%d",&m);for(n=1;n<=m;n++){longa,b;scanf("%ld",&a);for(b=a-1;b>=2;--b)if(isprime(b)==1&&isprime(a-b)==1)break;printf("%ld%ld\n",a-b,b);}return0;}12矩阵描述请写一个程序,对于一个m行m列(2主对角线是方正从左上角到右下角的一条斜线,辅对角线是方阵从右上角到左下角的一条斜线),然后按照从大到小的顺序依次输出这些值。输入说明只有一组数据;输入数据的第一行为一个正整数,表示m;接下来为m行、每行m个整数表示方阵的元素。输出说明从大到小排列的一行整数,每个整数后跟一个空格,最后换行。输入样例4158-2631241871-3-9271317213869输出样例159145144135816044322827#includeintmain(){intm,i,j,a[20][20]={0},b[42]={0},k;scanf("%d",&m);for(i=0;ifor(j=0;jscanf("%d",&a[i][j]);b[i]+=a[i][j];if(j==m)printf("\n");}for(j=0,k=m;jfor(i=0;ib[k]+=a[i][j];for(i=0,j=0;ifor(j=m-1,i=0;ifor(i=1;i<2*m+2;++i){for(k=b[i],j=i-1;j>=0&&b[j]>k;--j)b[j+1]=b[j];if(j!=i-1)b[j+1]=k;}for(i=2*m+1;i>=0;--i)printf("%d%c",b[i],'');printf("\n");return0;}//自己做的排序,比较简单for(i=1;i<=2*m+2;i++){for(j=1;j<=2*m+2;j++)if(b[j-1]{t=b[j-1];b[j-1]=b[j];b[j]=t;}}for(j=0;j<2*m+2;j++)printf("%d",b[j]);13回文数描述若一个整数其各位数字按照正反顺序读完全相同,则称之为回文数,例如12321。判断给出的整数是否是回文数。若是,则输出该整数各位数字之和,否则输出no.输入说明输入包含多组数据,第一行为整数n表示有几组数据,其后为n行数据,每行一个整数。输出说明对每一个整数,若该整数为回文数,则输出整数各位数字之和,否则输出no,然后换行。输入样例213124输出样例5no#include#includeintmain(){inta[200]={0},b,c,d=0,m,n,i,k,p,sum=0;scanf("%d",&n);for(m=0;mscanf("%d",&b);for(k=1,c=10;b/c>0;++k)c*=10;//注意此处k与下面略有不同for(i=0,p=k-1;ia[i]=(b%(int)pow(10,i+1))/(int)pow(10,i);sum+=a[i];d+=a[i]*pow(10,p);}if(d==b)printf("%d\n",sum);elseprintf("no\n");sum=0;d=0;}return0;}#include#includeintmain(){inta[200],m,n,i,k,p,c,d=0,sum=0;scanf("%d",&m);while(m--){scanf("%d",&n);for(k=0,c=10;n/c>0;k++)c*=10;for(i=0,p=k;i
d[i]=(a%(int)pow(10,i+1)/(int)pow(10,i));
sum+=(int)pow(d[i],k);
if(sum==a)
m++;
sum=0;
inta,b,m;
while(m--)
printf("%d\n",fun(a,b));
11歌德巴赫猜想
编写函数isPrime(longn),说明如下:
函数的功能是判断给定的正整数n是否为素数,函数的返回值1/0表示n是/不是素数。
编写main()函数,调用isPrime()验证歌德巴赫猜想:
任意一个大偶数都能分解为两个素数的和。
其后一行为m个正偶数,表示m个数据。
每行输出2个数据表示分解的素数(每个正偶数可能分解成多组素数和,仅输出分解值分别是最小和最大素数的一组,从小到大输出),换行。
1020
37
317
intisprime(longn)
if(n<=1)
for(m=2;mif(n%m==0)return0;return1;}intmain(){intm,n;scanf("%d",&m);for(n=1;n<=m;n++){longa,b;scanf("%ld",&a);for(b=a-1;b>=2;--b)if(isprime(b)==1&&isprime(a-b)==1)break;printf("%ld%ld\n",a-b,b);}return0;}12矩阵描述请写一个程序,对于一个m行m列(2主对角线是方正从左上角到右下角的一条斜线,辅对角线是方阵从右上角到左下角的一条斜线),然后按照从大到小的顺序依次输出这些值。输入说明只有一组数据;输入数据的第一行为一个正整数,表示m;接下来为m行、每行m个整数表示方阵的元素。输出说明从大到小排列的一行整数,每个整数后跟一个空格,最后换行。输入样例4158-2631241871-3-9271317213869输出样例159145144135816044322827#includeintmain(){intm,i,j,a[20][20]={0},b[42]={0},k;scanf("%d",&m);for(i=0;ifor(j=0;jscanf("%d",&a[i][j]);b[i]+=a[i][j];if(j==m)printf("\n");}for(j=0,k=m;jfor(i=0;ib[k]+=a[i][j];for(i=0,j=0;ifor(j=m-1,i=0;ifor(i=1;i<2*m+2;++i){for(k=b[i],j=i-1;j>=0&&b[j]>k;--j)b[j+1]=b[j];if(j!=i-1)b[j+1]=k;}for(i=2*m+1;i>=0;--i)printf("%d%c",b[i],'');printf("\n");return0;}//自己做的排序,比较简单for(i=1;i<=2*m+2;i++){for(j=1;j<=2*m+2;j++)if(b[j-1]{t=b[j-1];b[j-1]=b[j];b[j]=t;}}for(j=0;j<2*m+2;j++)printf("%d",b[j]);13回文数描述若一个整数其各位数字按照正反顺序读完全相同,则称之为回文数,例如12321。判断给出的整数是否是回文数。若是,则输出该整数各位数字之和,否则输出no.输入说明输入包含多组数据,第一行为整数n表示有几组数据,其后为n行数据,每行一个整数。输出说明对每一个整数,若该整数为回文数,则输出整数各位数字之和,否则输出no,然后换行。输入样例213124输出样例5no#include#includeintmain(){inta[200]={0},b,c,d=0,m,n,i,k,p,sum=0;scanf("%d",&n);for(m=0;mscanf("%d",&b);for(k=1,c=10;b/c>0;++k)c*=10;//注意此处k与下面略有不同for(i=0,p=k-1;ia[i]=(b%(int)pow(10,i+1))/(int)pow(10,i);sum+=a[i];d+=a[i]*pow(10,p);}if(d==b)printf("%d\n",sum);elseprintf("no\n");sum=0;d=0;}return0;}#include#includeintmain(){inta[200],m,n,i,k,p,c,d=0,sum=0;scanf("%d",&m);while(m--){scanf("%d",&n);for(k=0,c=10;n/c>0;k++)c*=10;for(i=0,p=k;i
return1;
for(n=1;n<=m;n++)
longa,b;
scanf("%ld",&a);
for(b=a-1;b>=2;--b)
if(isprime(b)==1&&isprime(a-b)==1)
printf("%ld%ld\n",a-b,b);
12矩阵
请写一个程序,对于一个m行m列(2主对角线是方正从左上角到右下角的一条斜线,辅对角线是方阵从右上角到左下角的一条斜线),然后按照从大到小的顺序依次输出这些值。输入说明只有一组数据;输入数据的第一行为一个正整数,表示m;接下来为m行、每行m个整数表示方阵的元素。输出说明从大到小排列的一行整数,每个整数后跟一个空格,最后换行。输入样例4158-2631241871-3-9271317213869输出样例159145144135816044322827#includeintmain(){intm,i,j,a[20][20]={0},b[42]={0},k;scanf("%d",&m);for(i=0;ifor(j=0;jscanf("%d",&a[i][j]);b[i]+=a[i][j];if(j==m)printf("\n");}for(j=0,k=m;jfor(i=0;ib[k]+=a[i][j];for(i=0,j=0;ifor(j=m-1,i=0;ifor(i=1;i<2*m+2;++i){for(k=b[i],j=i-1;j>=0&&b[j]>k;--j)b[j+1]=b[j];if(j!=i-1)b[j+1]=k;}for(i=2*m+1;i>=0;--i)printf("%d%c",b[i],'');printf("\n");return0;}//自己做的排序,比较简单for(i=1;i<=2*m+2;i++){for(j=1;j<=2*m+2;j++)if(b[j-1]{t=b[j-1];b[j-1]=b[j];b[j]=t;}}for(j=0;j<2*m+2;j++)printf("%d",b[j]);13回文数描述若一个整数其各位数字按照正反顺序读完全相同,则称之为回文数,例如12321。判断给出的整数是否是回文数。若是,则输出该整数各位数字之和,否则输出no.输入说明输入包含多组数据,第一行为整数n表示有几组数据,其后为n行数据,每行一个整数。输出说明对每一个整数,若该整数为回文数,则输出整数各位数字之和,否则输出no,然后换行。输入样例213124输出样例5no#include#includeintmain(){inta[200]={0},b,c,d=0,m,n,i,k,p,sum=0;scanf("%d",&n);for(m=0;mscanf("%d",&b);for(k=1,c=10;b/c>0;++k)c*=10;//注意此处k与下面略有不同for(i=0,p=k-1;ia[i]=(b%(int)pow(10,i+1))/(int)pow(10,i);sum+=a[i];d+=a[i]*pow(10,p);}if(d==b)printf("%d\n",sum);elseprintf("no\n");sum=0;d=0;}return0;}#include#includeintmain(){inta[200],m,n,i,k,p,c,d=0,sum=0;scanf("%d",&m);while(m--){scanf("%d",&n);for(k=0,c=10;n/c>0;k++)c*=10;for(i=0,p=k;i
主对角线是方正从左上角到右下角的一条斜线,辅对角线是方阵从右上角到左下角的一条斜线),然后按照从大到小的顺序依次输出这些值。
只有一组数据;输入数据的第一行为一个正整数,表示m;接下来为m行、每行m个整数表示方阵的元素。
从大到小排列的一行整数,每个整数后跟一个空格,最后换行。
158-26
31241871
-3-92713
17213869
159145144135816044322827
intm,i,j,a[20][20]={0},b[42]={0},k;
for(i=0;ifor(j=0;jscanf("%d",&a[i][j]);b[i]+=a[i][j];if(j==m)printf("\n");}for(j=0,k=m;jfor(i=0;ib[k]+=a[i][j];for(i=0,j=0;ifor(j=m-1,i=0;ifor(i=1;i<2*m+2;++i){for(k=b[i],j=i-1;j>=0&&b[j]>k;--j)b[j+1]=b[j];if(j!=i-1)b[j+1]=k;}for(i=2*m+1;i>=0;--i)printf("%d%c",b[i],'');printf("\n");return0;}//自己做的排序,比较简单for(i=1;i<=2*m+2;i++){for(j=1;j<=2*m+2;j++)if(b[j-1]{t=b[j-1];b[j-1]=b[j];b[j]=t;}}for(j=0;j<2*m+2;j++)printf("%d",b[j]);13回文数描述若一个整数其各位数字按照正反顺序读完全相同,则称之为回文数,例如12321。判断给出的整数是否是回文数。若是,则输出该整数各位数字之和,否则输出no.输入说明输入包含多组数据,第一行为整数n表示有几组数据,其后为n行数据,每行一个整数。输出说明对每一个整数,若该整数为回文数,则输出整数各位数字之和,否则输出no,然后换行。输入样例213124输出样例5no#include#includeintmain(){inta[200]={0},b,c,d=0,m,n,i,k,p,sum=0;scanf("%d",&n);for(m=0;mscanf("%d",&b);for(k=1,c=10;b/c>0;++k)c*=10;//注意此处k与下面略有不同for(i=0,p=k-1;ia[i]=(b%(int)pow(10,i+1))/(int)pow(10,i);sum+=a[i];d+=a[i]*pow(10,p);}if(d==b)printf("%d\n",sum);elseprintf("no\n");sum=0;d=0;}return0;}#include#includeintmain(){inta[200],m,n,i,k,p,c,d=0,sum=0;scanf("%d",&m);while(m--){scanf("%d",&n);for(k=0,c=10;n/c>0;k++)c*=10;for(i=0,p=k;i
for(j=0;jscanf("%d",&a[i][j]);b[i]+=a[i][j];if(j==m)printf("\n");}for(j=0,k=m;jfor(i=0;ib[k]+=a[i][j];for(i=0,j=0;ifor(j=m-1,i=0;ifor(i=1;i<2*m+2;++i){for(k=b[i],j=i-1;j>=0&&b[j]>k;--j)b[j+1]=b[j];if(j!=i-1)b[j+1]=k;}for(i=2*m+1;i>=0;--i)printf("%d%c",b[i],'');printf("\n");return0;}//自己做的排序,比较简单for(i=1;i<=2*m+2;i++){for(j=1;j<=2*m+2;j++)if(b[j-1]{t=b[j-1];b[j-1]=b[j];b[j]=t;}}for(j=0;j<2*m+2;j++)printf("%d",b[j]);13回文数描述若一个整数其各位数字按照正反顺序读完全相同,则称之为回文数,例如12321。判断给出的整数是否是回文数。若是,则输出该整数各位数字之和,否则输出no.输入说明输入包含多组数据,第一行为整数n表示有几组数据,其后为n行数据,每行一个整数。输出说明对每一个整数,若该整数为回文数,则输出整数各位数字之和,否则输出no,然后换行。输入样例213124输出样例5no#include#includeintmain(){inta[200]={0},b,c,d=0,m,n,i,k,p,sum=0;scanf("%d",&n);for(m=0;mscanf("%d",&b);for(k=1,c=10;b/c>0;++k)c*=10;//注意此处k与下面略有不同for(i=0,p=k-1;ia[i]=(b%(int)pow(10,i+1))/(int)pow(10,i);sum+=a[i];d+=a[i]*pow(10,p);}if(d==b)printf("%d\n",sum);elseprintf("no\n");sum=0;d=0;}return0;}#include#includeintmain(){inta[200],m,n,i,k,p,c,d=0,sum=0;scanf("%d",&m);while(m--){scanf("%d",&n);for(k=0,c=10;n/c>0;k++)c*=10;for(i=0,p=k;i
scanf("%d",&a[i][j]);
b[i]+=a[i][j];
if(j==m)printf("\n");}
for(j=0,k=m;jfor(i=0;ib[k]+=a[i][j];for(i=0,j=0;ifor(j=m-1,i=0;ifor(i=1;i<2*m+2;++i){for(k=b[i],j=i-1;j>=0&&b[j]>k;--j)b[j+1]=b[j];if(j!=i-1)b[j+1]=k;}for(i=2*m+1;i>=0;--i)printf("%d%c",b[i],'');printf("\n");return0;}//自己做的排序,比较简单for(i=1;i<=2*m+2;i++){for(j=1;j<=2*m+2;j++)if(b[j-1]{t=b[j-1];b[j-1]=b[j];b[j]=t;}}for(j=0;j<2*m+2;j++)printf("%d",b[j]);13回文数描述若一个整数其各位数字按照正反顺序读完全相同,则称之为回文数,例如12321。判断给出的整数是否是回文数。若是,则输出该整数各位数字之和,否则输出no.输入说明输入包含多组数据,第一行为整数n表示有几组数据,其后为n行数据,每行一个整数。输出说明对每一个整数,若该整数为回文数,则输出整数各位数字之和,否则输出no,然后换行。输入样例213124输出样例5no#include#includeintmain(){inta[200]={0},b,c,d=0,m,n,i,k,p,sum=0;scanf("%d",&n);for(m=0;mscanf("%d",&b);for(k=1,c=10;b/c>0;++k)c*=10;//注意此处k与下面略有不同for(i=0,p=k-1;ia[i]=(b%(int)pow(10,i+1))/(int)pow(10,i);sum+=a[i];d+=a[i]*pow(10,p);}if(d==b)printf("%d\n",sum);elseprintf("no\n");sum=0;d=0;}return0;}#include#includeintmain(){inta[200],m,n,i,k,p,c,d=0,sum=0;scanf("%d",&m);while(m--){scanf("%d",&n);for(k=0,c=10;n/c>0;k++)c*=10;for(i=0,p=k;i
for(i=0;ib[k]+=a[i][j];for(i=0,j=0;ifor(j=m-1,i=0;ifor(i=1;i<2*m+2;++i){for(k=b[i],j=i-1;j>=0&&b[j]>k;--j)b[j+1]=b[j];if(j!=i-1)b[j+1]=k;}for(i=2*m+1;i>=0;--i)printf("%d%c",b[i],'');printf("\n");return0;}//自己做的排序,比较简单for(i=1;i<=2*m+2;i++){for(j=1;j<=2*m+2;j++)if(b[j-1]{t=b[j-1];b[j-1]=b[j];b[j]=t;}}for(j=0;j<2*m+2;j++)printf("%d",b[j]);13回文数描述若一个整数其各位数字按照正反顺序读完全相同,则称之为回文数,例如12321。判断给出的整数是否是回文数。若是,则输出该整数各位数字之和,否则输出no.输入说明输入包含多组数据,第一行为整数n表示有几组数据,其后为n行数据,每行一个整数。输出说明对每一个整数,若该整数为回文数,则输出整数各位数字之和,否则输出no,然后换行。输入样例213124输出样例5no#include#includeintmain(){inta[200]={0},b,c,d=0,m,n,i,k,p,sum=0;scanf("%d",&n);for(m=0;mscanf("%d",&b);for(k=1,c=10;b/c>0;++k)c*=10;//注意此处k与下面略有不同for(i=0,p=k-1;ia[i]=(b%(int)pow(10,i+1))/(int)pow(10,i);sum+=a[i];d+=a[i]*pow(10,p);}if(d==b)printf("%d\n",sum);elseprintf("no\n");sum=0;d=0;}return0;}#include#includeintmain(){inta[200],m,n,i,k,p,c,d=0,sum=0;scanf("%d",&m);while(m--){scanf("%d",&n);for(k=0,c=10;n/c>0;k++)c*=10;for(i=0,p=k;i
b[k]+=a[i][j];
for(i=0,j=0;ifor(j=m-1,i=0;ifor(i=1;i<2*m+2;++i){for(k=b[i],j=i-1;j>=0&&b[j]>k;--j)b[j+1]=b[j];if(j!=i-1)b[j+1]=k;}for(i=2*m+1;i>=0;--i)printf("%d%c",b[i],'');printf("\n");return0;}//自己做的排序,比较简单for(i=1;i<=2*m+2;i++){for(j=1;j<=2*m+2;j++)if(b[j-1]{t=b[j-1];b[j-1]=b[j];b[j]=t;}}for(j=0;j<2*m+2;j++)printf("%d",b[j]);13回文数描述若一个整数其各位数字按照正反顺序读完全相同,则称之为回文数,例如12321。判断给出的整数是否是回文数。若是,则输出该整数各位数字之和,否则输出no.输入说明输入包含多组数据,第一行为整数n表示有几组数据,其后为n行数据,每行一个整数。输出说明对每一个整数,若该整数为回文数,则输出整数各位数字之和,否则输出no,然后换行。输入样例213124输出样例5no#include#includeintmain(){inta[200]={0},b,c,d=0,m,n,i,k,p,sum=0;scanf("%d",&n);for(m=0;mscanf("%d",&b);for(k=1,c=10;b/c>0;++k)c*=10;//注意此处k与下面略有不同for(i=0,p=k-1;ia[i]=(b%(int)pow(10,i+1))/(int)pow(10,i);sum+=a[i];d+=a[i]*pow(10,p);}if(d==b)printf("%d\n",sum);elseprintf("no\n");sum=0;d=0;}return0;}#include#includeintmain(){inta[200],m,n,i,k,p,c,d=0,sum=0;scanf("%d",&m);while(m--){scanf("%d",&n);for(k=0,c=10;n/c>0;k++)c*=10;for(i=0,p=k;i
for(j=m-1,i=0;ifor(i=1;i<2*m+2;++i){for(k=b[i],j=i-1;j>=0&&b[j]>k;--j)b[j+1]=b[j];if(j!=i-1)b[j+1]=k;}for(i=2*m+1;i>=0;--i)printf("%d%c",b[i],'');printf("\n");return0;}//自己做的排序,比较简单for(i=1;i<=2*m+2;i++){for(j=1;j<=2*m+2;j++)if(b[j-1]{t=b[j-1];b[j-1]=b[j];b[j]=t;}}for(j=0;j<2*m+2;j++)printf("%d",b[j]);13回文数描述若一个整数其各位数字按照正反顺序读完全相同,则称之为回文数,例如12321。判断给出的整数是否是回文数。若是,则输出该整数各位数字之和,否则输出no.输入说明输入包含多组数据,第一行为整数n表示有几组数据,其后为n行数据,每行一个整数。输出说明对每一个整数,若该整数为回文数,则输出整数各位数字之和,否则输出no,然后换行。输入样例213124输出样例5no#include#includeintmain(){inta[200]={0},b,c,d=0,m,n,i,k,p,sum=0;scanf("%d",&n);for(m=0;mscanf("%d",&b);for(k=1,c=10;b/c>0;++k)c*=10;//注意此处k与下面略有不同for(i=0,p=k-1;ia[i]=(b%(int)pow(10,i+1))/(int)pow(10,i);sum+=a[i];d+=a[i]*pow(10,p);}if(d==b)printf("%d\n",sum);elseprintf("no\n");sum=0;d=0;}return0;}#include#includeintmain(){inta[200],m,n,i,k,p,c,d=0,sum=0;scanf("%d",&m);while(m--){scanf("%d",&n);for(k=0,c=10;n/c>0;k++)c*=10;for(i=0,p=k;i
for(i=1;i<2*m+2;++i){
for(k=b[i],j=i-1;j>=0&&b[j]>k;--j)
b[j+1]=b[j];
if(j!
=i-1)b[j+1]=k;
for(i=2*m+1;i>=0;--i)printf("%d%c",b[i],'');
//自己做的排序,比较简单
for(i=1;i<=2*m+2;i++)
for(j=1;j<=2*m+2;j++)
if(b[j-1]
t=b[j-1];
b[j-1]=b[j];
b[j]=t;
for(j=0;j<2*m+2;j++)
printf("%d",b[j]);
13回文数
若一个整数其各位数字按照正反顺序读完全相同,则称之为回文数,例如12321。
判断给出的整数是否是回文数。
若是,则输出该整数各位数字之和,否则输出no.
输入包含多组数据,第一行为整数n表示有几组数据,其后为n行数据,每行一个整数。
对每一个整数,若该整数为回文数,则输出整数各位数字之和,否则输出no,然后换行。
131
5
no
inta[200]={0},b,c,d=0,m,n,i,k,p,sum=0;
for(m=0;mscanf("%d",&b);for(k=1,c=10;b/c>0;++k)c*=10;//注意此处k与下面略有不同for(i=0,p=k-1;ia[i]=(b%(int)pow(10,i+1))/(int)pow(10,i);sum+=a[i];d+=a[i]*pow(10,p);}if(d==b)printf("%d\n",sum);elseprintf("no\n");sum=0;d=0;}return0;}#include#includeintmain(){inta[200],m,n,i,k,p,c,d=0,sum=0;scanf("%d",&m);while(m--){scanf("%d",&n);for(k=0,c=10;n/c>0;k++)c*=10;for(i=0,p=k;i
scanf("%d",&b);
for(k=1,c=10;b/c>0;++k)c*=10;//注意此处k与下面略有不同
for(i=0,p=k-1;ia[i]=(b%(int)pow(10,i+1))/(int)pow(10,i);sum+=a[i];d+=a[i]*pow(10,p);}if(d==b)printf("%d\n",sum);elseprintf("no\n");sum=0;d=0;}return0;}#include#includeintmain(){inta[200],m,n,i,k,p,c,d=0,sum=0;scanf("%d",&m);while(m--){scanf("%d",&n);for(k=0,c=10;n/c>0;k++)c*=10;for(i=0,p=k;i
a[i]=(b%(int)pow(10,i+1))/(int)pow(10,i);
sum+=a[i];
d+=a[i]*pow(10,p);
if(d==b)printf("%d\n",sum);
elseprintf("no\n");
sum=0;d=0;
inta[200],m,n,i,k,p,c,d=0,sum=0;
for(k=0,c=10;n/c>0;k++)
for(i=0,p=k;i
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2