程序题解答案.docx
- 文档编号:23756214
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:57
- 大小:31.74KB
程序题解答案.docx
《程序题解答案.docx》由会员分享,可在线阅读,更多相关《程序题解答案.docx(57页珍藏版)》请在冰豆网上搜索。
程序题解答案
(1)把一张一元钞票,换成一分、二分、和五分硬币,每种至少11枚,问有多少种方案
main()
{intyf,ef,wf,i=0;
for(yf=11;yf<100;yf++)
for(ef=11;ef<50;ef++)
for(wf=11;wf<20;wf++)
if(yf+ef*2+wf*5==100)
{printf("yf=%d,ef=%d,wf=%d\n",yf,ef,wf);
i++;
}(13)
printf("i=%d",i);
}
(2)(100,999)范围内同时满足一下两个条件的十进制数。
(1)起个位数字与十位数字之和除以10所得余数是百位数字;
(2)该数字是素数;求有多少这样的数
main()
{intm,i,k,a,b,c,n=0;
for(m=101;m<=999;m=m+2)
{a=m/100;
b=m/10-a*10;
c=m%10;
if((b+c)%10==a)
if(abc(m))
n++;
}
printf("%4d\n",n);
}
intabc(inta)
{inti;
for(i=2;i<=a/2;i++)
if(a%i==0)
return0;
return1;
}(15)
(3)(300,800)范围内同时满足一下两个条件的十进制数。
(1)其个位数字与十位数字之和除以10所得余数是百位数字;
(2)该数十素数;求满足上述条件的最大的三位十进制数
main()
{intm,i,k,a,b,c,n=0;
for(m=301;m<=800;m=m+2)
{a=m/100;
b=m/10-a*10;
c=m%10;
if((b+c)%10==a)
if(abc(m))
{printf("%4d",m);n++;
}
}
printf("%4d\n",n);
}
intabc(inta)
{inti;
for(i=2;i<=a/2;i++)
if(a%i==0)
return0;
return1;
}(761)
(4)A,B,C是三个小于或等于100正整数,但满足1/A^2+1/B^2=1/C^2关系时,称为倒勾股数。
求130B>C的倒勾股数有多少组
main()
{floats,t;
inta,b,c,n=0;
for(c=1;c<=100;c++)
for(b=c+1;b<=100;b++)
for(a=b+1;a<=100;a++)
{t=1.0/(a*a)+1.0/(b*b);s=1.0/(c*c);
if(t==s)
if(a+b+c>130&&a+b+c<150)
n++;
}
printf("%d\n",n);
}
(1)
(5)把一张一元钞票,换成一分、二分和五分硬币,每种至少8枚,问有多少种方案?
main()
{intyf,ef,wf,i=0;
for(yf=8;yf<100;yf++)
for(ef=8;ef<50;ef++)
for(wf=8;wf<20;wf++)
if(yf+ef*2+wf*5==100)
i++;
clrscr()
printf("%d",i);
}(80)
(6)编程求取:
[121,140]之间的弦数的个数(若某正整数的平方等于另两个正整数平方之和,则称该数为弦数.例如:
3^2+4^2=5^2,因此5是弦数)。
main()
{inti,j,k,a=0,b=0;
for(i=121;i<=140;i++)
for(j=1;j<=140;j++)
for(k=j+1;k<=140;k++)
if((j*j+k*k)==i*i)
{printf("%d^2+%d^2=%d^2\n",j,k,i);
j=141;b++;
}
printf("%d",b);
}(8)
(7)除1和它本身外,不能被其它整数整除的正整数称为素数(注:
1不是素数,2是素数)。
若两素数之差为2,则称两素数为双胞胎数,问[31,601]之间有多少对双胞胎数。
main()
{intm,i,k,a=0,n=0;
for(m=31;m<=601;m=m+2)
if(abc(m)&&abc(m+2))
{printf("{%d,%d}",m,m+2);n++;}
printf("%4d",n);
}
intabc(inta)
{inti;
for(i=2;i<=a/2;i++)
if(a%i==0)
return0;
return1;
}(22)
(8)当m的值为50时,计算下列公式的值:
T=1-1/2-1/3-1/4-…-1/m
要求:
按四舍五入的方式精确到小数点后第四位。
main()
{floatt=1,i;
for(i=2;i<=50;i++)
t=t-1.0/i;
printf("%.4f",t);
}(-2.4992)
(9)当m的值为50时,计算下列公式之值:
t=1+1/2^2+1/3^2+…+1/m^2
(按四舍五入的方式精确到小数点后第四位)。
main()
{floatt=1,i;
for(i=2;i<50;i++)
t=t+1.0/(i*i);
printf("\n%.4f",t);
}(1.6251)
(10)当m的值为50时,计算下列公式之值:
t=1-1/(2*2)-1/(3*3)-…-1/(m*m)
要求:
按四舍五入的方式精确到小数点后第四位。
main()
{floatt=1,i;
for(i=2;i<=50;i++)
t=t-1.0/(i*i);
printf("\n%.4f",t);
}(0.3749)
(11)当n=100时,计算S=(1-1/2)+(1/3-1/4)+……+(1/(2n-1)-1/(2n))的值。
.
要求:
按四舍五入的方式精确到小数点后第三位。
main()
{floatt=1;
inti;
for(i=2;i<=200;i++)
if(i%2==0)
t=t-1.0/i;
elset=t+1.0/i;
printf("\n%.3f",t);
}(0.691)
(12)当n的值为25时,计算下列公式的值:
s=1+1/1!
+1/2!
+1/3!
+…+1/n!
要求:
按四舍五入的方式精确到小数点后第四位。
main()
{floatt=1,s=1;
inti;
for(i=1;i<=25;i++)
{s=s*i;
t=t+1.0/s;
}
printf("\n%.4f",t);
}(2.7183)
(13)倒勾股数是满足公式:
1/A^2+1/B^2=1/C^2的一组正整数(A,B,C),例如,(156,65,60)是倒勾股数,因为:
1/156^2+1/65^2=1/60^2。
假定A>B>C,求A,B,C之和小于100的倒勾股数有多少组?
main()
{floatt,s;
inta,b,c,n=0;
for(c=1;c<=100;c++)
for(b=c+1;b<=100;b++)
for(a=b+1;a<=100;a++)
{t=1.0/(a*a)+1.0/(b*b);
s=1.0/(c*c);
if(t==s)
if((a+b+c)<100)
n++;
}
printf("%d\n",n);
}
(2)
(14)勾股弦数是满足公式:
A^2+B^2=C^2(假定A
3^2+4^2=5^2。
求A,B,C均小于或等于100的勾股弦数的个数。
main()
{inta,b,c,n=0;
for(a=1;a<=100;a++)
for(b=a+1;b<=100;b++)
for(c=b+1;c<=100;c++)
if(a*a+b*b==c*c)
n=n+1;
printf("\n%d",n);
}(52)
(15)勾股弦数是满足公式:
A^2+B^2=C^2(假定A
3^2+4^2=5^2。
求A,B均小于25且A+B+C<=100的勾股弦数的个数。
main()
{inta,b,c,n=0;
for(a=1;a<25;a++)
for(b=a+1;b<25;b++)
for(c=b+1;c<=50;c++)
if(a*a+b*b==c*c)
n+=1;
printf("\n%d",n);
}(11)
(16)国数学家哥德巴赫曾猜测:
任何大于6的偶数都可以分解成两个素数(素数对)的和。
但有些偶数可以分解成多种素数对的和,如:
10=3+7,10=5+5,即10可以分解成两种不同的素数对。
试求6744可以分解成多少种不同的素数对(注:
A+B与B+A认为是相同素数对)
main()
{intm,i,a,b,n=0;
for(m=3;m<=6744/2;m=m+2)
if(abc(m)&&abc(6744-m))
{printf("%d,%d",m,6744-m);
n=n+1;
}
printf("\n%d",n);
}
intabc(inta)
{intk,i,t;
for(i=2;i<=a/2;i++)
if(a%i==0)
return0;
return1;}(144)
(17)回文数是指正读和反读都一样的正整数。
例如3773是回文数。
求出[1000,9999]以内的所有回文数的个数。
main()
{inti,a,b,c,d,n=0;
for(i=1000;i<=9999;i++)
{a=i/1000;
b=i/100-a*10;
c=i/10-b*10-a*100;
d=i%10;
if(a==d&&b==c)
{printf("%6d",i);n=n+1;
if(n%10==0)printf("\n");}}
printf("%4d",n);
}(90)
(18)利用格里高利公式:
α/4=1-1/3+1/5-1/7+1/9-1/11+…-1/99,求α的值。
要求:
按四舍五入的方式精确到小数点后第二位。
main()
{floatt=1,a,i,b=1.0;
for(i=3;i<=99;i=i+2)
{b=-b;
t=t+b/i;
}
a=t*4;
printf("\n%.4f",a);
}(3.14)
(19)两个素数之差为2,则称这两个素数为双胞胎数。
求出[200,1000]之间的最大一对双胞胎数的和。
main()
{intm,i,k,a=0,n=0;
for(m=201;m<=1000;m=m+2)
if(abc(m))
if(abc(m+2))
k=m+m+2
printf("%4d",k);
}
intabc(inta)
{inti,t,k;
for(i=2;i<=a/2;i++)
if(a%i==0)
return0;
return1;
}(1764)
(20)马克思曾经做过这样一道趣味数学题:
有30个人在一家小饭店里用餐,其中有男人、女人和小孩,每个男人花了3先令,每个女人花了2先令,每个小孩花了1先令,共花去50先令。
如果要求男人、女人和小孩都有人参与,试求有多少种方案分配男人、女人和小孩的人数。
main()
{intm,r,x,n=0;
for(m=1;m<=15;m++)
for(r=1;r<=28;r++)
{x=30-m-r;
if(3*m+2*r+x==50)
{printf("%d,%d,%d\n",m,r,x);
n=n+1;
}
}
printf("%d",n);
}(9)
(21)某些分数的分子和分母都是二位正整数的真分数具有下列特点:
如果将该分数的分子的两位数字相加作分子,而将该分数的分母的两位数字相加作分母,得到的新分子跟原分子相等。
例如,63/84=(6+3)/(8+4)。
试求所有具有这种特点的真分子(非约简真分数)的分子与分母之和的和。
main()
{inti,j,a,b,c,d,t=0;
for(i=10;i<=98;i++)
for(j=i+1;j<=99;j++)
{a=i/10;b=i%10;c=j/10;d=j%10;
if((float)i/j==(float)(a+b)/(c+d))
t=t+i+j;
}
printf("\n%d",t);
}(10134)
(22)求[1,50]之间的所有整数能构成直角三角形的三边的组数。
例如:
3*3+4*4=5*5,它们构成直角三角形,所以{3,4,5}作为一组,但{4,3,5}视为跟{3,4,5}相同的一组。
main()
{inti,j,k,t=0;
for(i=5;i<=50;i++)
for(j=1;j<50;j++)
for(k=j+1;k<50;k++)
if(i*i==j*j+k*k)
t=t+1;
printf("\n%d",t);}(20)
(23)求[1,999]之间能被3整除,且至少有一位数字是5的所有正整数的个数。
main()
{intm,i,k,a,b,c,n=0;
for(m=1;m<=999;m++)
{a=m/100;
b=m/10-a*10;
c=m%10;
if(m%3==0)
if(a==5||b==5||c==5)
n=n+1;
}
printf("\n%d",n);
}(91)
(24)求[200,300]之间有奇数个不同因子的最大的整数(在计算因子个数时,包括该数本身)。
main()
{intm,s,i;
for(m=200;m<300;m++)
{s=0;
for(i=1;i<=m;i++)
if(m%i==0)
s++;
if(s%2!
=0)
printf("\n%d",m);
}
}(289)
(25)求[5,500]中相差为10的素数对(注:
要求素数对的两个素数均在该范围内)的个数(即:
有多少个这样的素数对)。
main()
{intm,i,k,a=0,n=0;
for(m=5;m<=500;m=m+2)
if(abc(m)&&abc(m+10)&&(m+10)<500)
n++;
printf("%4d",n);
}
intabc(inta)
{inti;
for(i=2;i<=a/2;i++)
if(a%i==0)
return0;
return1;
}(31)
(26)求1/(1*2)+1/(2*3)+1/(3*4)+....+1/(N*(N+1))的值,N=20,要求:
按四舍五入的方式精确到小数点后第二位。
main()
{floatt=0,i;
for(i=1;i<=20;i++)
t=t+1.0/(i*(i+1));
printf("%.2f",t);
}(.095)
(27)求500以内(含500)能被5或9整除的所有自然数的倒数之和。
按四舍五入的方式精确到小数点后第二位。
main()
{inti;
floatt=0;
for(i=1;i<=500;i++)
if(i%5==0||i%9==0)
t=t+1.0/i;
printf("\n%.2f",t);
}(1.48)
(28)求S=1/2+2/3+3/5+5/8+……的前30项的和(注:
该级数从第二项开始,其分子是前一项的分母,其分母是前一项的分子与分母的和)。
要求:
按四舍五入的方式精确到小数点后第二位。
main()
{intm;
floats=0,i,a=1.0,b=2.0;
for(m=1;m<=30;m++)
{s=s+a/b;
i=a;a=b;b=i+b;
}
printf("\n%.2f",s);
}(18.46)
(29)求方程8x-5y=3,在|x|<=150,|y|<=200内的整数解。
试问这样的整数解有多少组?
main()
{intx,y,m=0;
for(x=-150;x<=150;x++)
for(y=-200;y<=200;y++)
if(8*x-5*y==3)
m++;
printf("\n%d",m);
}(50)
(30)求方程8x-5y=3,在|x|<=150,|y|<=200内的整数解。
试问这样的整数解中|x|*|y|的最大值是多少?
main()
{longx,y,max=0;
for(x=-150;x<=150;x++)
for(y=-200;y<=200;y++)
if(8*x-5*y==3)
if(max max=x*y; printf("\n%ld",max); }(24676) (31)求符合下列条件的四位完全平方数(某个正整数A是另一个正整数B的平方,则称A为完全平方数),它的千位数字与十位数字之和等于百位数字与个位数字之积,例如,3136=56^2,且3+3=1*6故3136是所求的四位完全平方数.求其中最大的一个数。 main() {longi,a,b,c,d,x,max=0; for(i=11;i<=99;i++) {x=i*i; a=x/1000;b=x/100%10;c=x/10%10;d=x%10; if(a+c==b*d) if(max max=x; } printf("\n%ld",max); }(7921) (32)求数学式1-1/2+1/3-1/4+1/5-1/6+…+1/99-1/100的值。 (按四舍五入方式精确到小数点后4位) main() {inti,j=1; floatt=1; for(i=2;i<=100;i++) {j=-j; t=t+j*1.0/i; } printf("\n%.4f",t); }(0.6882) (33)求在[10,1000]之间的所有完数之和。 各真因子之和(不包括自身)等于其本身的正整数称为完数。 例如: 6=1+2+3,6是完数。 main() {intm,s,i,t=0; for(m=10;m<1000;m++) {s=0; for(i=1;i if(m%i==0)s=s+i; if(s==m) t=t+m; } printf("\n%d",t); }(524) (34)若(x,y,z)满足方程: x^2+y^2+z^2=55^2(注: 要求x>y>z),则(x,y,z)称为方程的一个解。 试求方程的所有整数解中,|x|+|y|+|z|的最大值。 #include"math.h" main() {intx,y,z,max=0; for(x=-53;x<=54;x++) for(y=x-1;y<=54;y++) for(z=y-1;z<=54;z++) if(x*x+y*y+z*z==55*55) if(max<(fabs(x)+fabs(y)+fabs(z))) max=fabs(x)+fabs(y)+fabs(z); printf("\n%d",max); }(95) (35)若两个连续的自然数的乘积减1后是素数,则称此两个连续自然数为友数对,该素数称为友素数。 例如,由于8*9-1=71,因此,8与9是友数对,71是友素数。 求[100,200]之间的第10个友素数对所对应的友素数的值(按由小到大排列)。 main() {intm,b,i,k,a=0,n=0; for(m=100;m<=200;m=m++) {b=m*(m+1)-1; if(abc(b)) n++; if(n==10)break; } printf("\n%d",b); } intabc(inta) {inti; for(i=2;i<=a/2;i++) if(a%i==0) return0; return1; }(17291) (36)若两个自然连续数乘积减1后是素数,则称此两个自然连续数为友数对,该素数称为友素数,例: 2*3-1=5,因此2与3是友数对,5是友素数,求[40,119]之间友素数对的数目。 main() {intm,b,n=0; for(m=40;m<=119;m=m++) {b=m*(m+1)-1; if(abc(b)) n++; } printf("\n%d",n); } intabc(inta) {inti; for(i=2;i<=a/2;i++) if(a%i==0) return0; return1; }(30) (37)若某整数平方等于某两个正整数平方之和的正整数称为弦数。 例如: 由于3^2+4^2=5^2,则5为弦数,求[100,200]之间弦数的个数。 main() {longx,y,z,n=0; for(z=100;z<=200;z++) for(x=1;x<=200;x++) for(y=x+1;y<=200;y++) if(x*x+y*y==z*z) {n++; x=200; } printf("\n%d",n); }(55) (38)若一个四位正整数是另一个正整数的平方,且各位数字的和是一个平方数,则称该四位正整数是“四位双平方数”。 例如: 由于7396=86^2,且7+3+9+6=25=5^2,则称7396是“四位双平方数”。 求所有“四位双平方数”之和。 #include"math.h" main() {longintt=0; inti,a,b,c,d; for(i=1000;i<=9999;i++) {a=i/1000;b=i/100%10;c=i/10%10;d=i%10; if(abc(i)&&abc(a+b+c+d)) t=t+i; } printf("\n%ld",t); } intabc(intm) {inti; for(i=1;i<=sqrt(m);i++) if(i*i==m) return1; return0; }(81977) (39)设S(n)=1-1/3+1/5-1/7+…1/(2n-1),求S(100)的值,要求S(100)按四舍五入方式精确到小数点后4位。 main() {inti,a=1; floats=1; for(i=3;i<=199;i=i+2) {a=-a; s=s+a*1.0/i; } printf("\n%.4f",s); }(0.7892) (40)设S=1+1/2+1/3+…1/n,n为正整数,求使S
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序 题解 答案