省考C语言程序设计题附答案

更新时间:2024-05-29 11:20:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

1.

1.素数

[100,999]范围内同时满足以下两个条件的十进制数. ⑴其个位数

字与十位数字之和除以10所得的余数是百位数字;⑵该数是素数; 求有多少个这样的数? 15

#include int prime(int x) {int i,k; if(x<2) return(0); k=sqrt(x); for(i=2;i<=k;i++) if (x%i==0) break; if (i>k) return(1); else return(0); } main()

for(i=100;i<=999;i++) { int i,n=0,a,b,c; { a=i/100; b=i0/10; c=i;

if ((b+c)==a&&prime(i))

1

n++; }

printf(\} 2.

[300,800]范围内同时满足以下两个条件的十进制数. ⑴其个位数

字与十位数字之和除以10所得的余数是百位数字 ;⑵该数是素数;求满足上述条件的最大的三位十进制数。 3.

761

除1和它本身外,不能被其它整数整除的正整数称为素数(注:1

不是素数,2是素数)。若两素数之差为2 ,则称两素数为双胞胎数,问[31,601]之间有多少对双胞胎数。 #include int prime(int x) {int i,k; if(x<2) return(0); k=sqrt(x); for(i=2;i<=k;i++) if (x%i==0) break; if (i>k) return(1); else return(0); } main()

2

22

{ int i,n=0;

for(i=31;i<=599;i++)

if (prime(i)&&prime(i+2)) n++; printf(\} 4.

数学家哥德巴赫曾猜测:任何大于6的偶数都可以分解成两个素数

(素数对)的和。但有些偶数可以分解成多种素数对的和,如: 10=3+7,10=5+5,即10可以分解成两种不同的素数对。试求6744可以分解成多少种不同的素数对(注: A+B与B+A认为是相同素数对) #include int prime(int x) {int i,k; if(x<2) return(0); k=sqrt(x); for(i=2;i<=k;i++) if (x%i==0) break; if (i>k) return(1); else return(0); } main() { int i,n;

3

144

n=0;

for(i=31;i<=599;i++)

if (prime(i)&&prime(i+2)) n++; printf(\} 5.

两个素数之差为2,则称这两个素数为双胞胎数。求出[200,1000]

1764

之间的最大一对双胞胎数的和。 6.

一个素数(设为p)依次从最高位去掉一位,二位,三位,……,

若得到的各数仍都是素数(注:除1和它本身外,不能被其它整数整除的正整数称为素数,1不是素数,2是素数),且数p的各位数字均不为零,则称该数p为逆向超级素数。例如,617,17,7都是素数,因此617是逆向超级素数,尽管503,03,3都是素数,但它不是逆向超级素数,因为它包含有零。试求[100,999]之内的所有逆向超级素数的个数。 39 7.

德国数学家哥德巴赫曾猜测:任何大于6的偶数都可以分解成两个

素数(素数对)的和。但有些偶数可以分解成多种素数对的和,如: 10=3+7,10=5+5,即10可以分解成两种不同的素数对。试求1234可以分解成多少种不同的素数对(注: A+B与B+A认为是相同素数对)

25

8.求[100,900]之间相差为12的素数对(注:要求素数对的两个素数均在该范围内)的个数。 #include int prime(int x) {int i,k;

4

50

if(x<2) return(0); k=sqrt(x); for(i=2;i<=k;i++) if (x%i==0) break; if (i>k) return(1); else return(0); } main() { int i,n=0;

for(i=100;i<=900-12;i++) if (prime(i)&&prime(i+12)) n++; printf(\} 9.

一个素数(设为p)依次从最高位去掉一位,二位,三位,……,

若得到的各数仍都是素数(注:1不是素数),且数p的各位数字均不为零,则称该数p为逆向超级素数。例如,617,17,7都是素数,因此617是逆向超级素数,但尽管503,03,3都是素数,但它不是逆向超级素数,因为它包含有零。试求[100,999]之内的所有逆向超级素数的和。

21645

#include int prime(int x)

5

{ a=i/1000; b=i00/100; c=i0/10; d=i;

if (a*a+c*c==b*b*b+d*d*d) k=k+i; }

printf(\}

22. 设某四位数的千位数字与十位数字的和等于百位数字与个位数字的积,例如,对于四位数:9512,9+1=5*2,试问所有这样的四位数之和是多少?

1078289

23. 有一个三位数满足下列条件: (1)此三位数的三位数字各不相同; (2)此三位数等于它的各位数字的立方和。试求所有这样的三位数之和。

1301

24. 求[1,999]之间能被3整除,且至少有一位数字是5的所有正整数的个数。 main() {int i,k=0; int a,b,c;

for(i=1;i<=999;i++) { a=i/100; b=i0/10;

11

91

c=i;

if ((i%3==0)&&(a==5||b==5||c==5)) k=k+1; }

printf(\}

25. 有一个三位数满足下列条件: (1)此三位数的三位数字各不相同; (2)此三位数等于它的各位数字的立方和。试求所有这样的三位数中最大的一个是多少? main() {int i,max=0; int a,b,c;

for(i=100;i<=999;i++) { a=i/100; b=i0/10; c=i;

if ((a*a*a+b*b*b+c*c*c==i)&&(a!=b&&b!=c&&a!=c)) if (max

printf(\}

26. 有一个三位数满足下列条件: (1)此三位数的三位数字各不相同; (2)

12

407

此三位数等于它的各位数字的立方和。试求这种三位数共有多少个?

4

94111

27. 求五位数各位数字的平方和为100的最大的五位数。

28. 所谓“水仙花数”是指一个三位数,其各位数字的三次方之和等于该数本身,例如:153=1^3+3^3+5^3,故153是水仙花数,求[100,999]之间所有水仙花数之和。 main() {int i,k=0; int a,b,c;

for(i=100;i<=999;i++) { a=i/100; b=i0/10; c=i;

if ((a*a*a+b*b*b+c*c*c==i)) k=k+i; }

printf(\}

29. 设某四位数的各位数字的平方和等于100,问共有多少个这种四位数? 49

30. 回文数是指正读和反读都一样的正整数。例如3773是回文数。求出[1000,9999]以内的所有回文数的个数。 main()

13

1301

90

{long i,k=0; int a,b,c,d;

for(i=1000;i<=9999;i++) { a=i/1000; b=i00/100; c=i0/10; d=i;

if (d*1000+c*100+b*10+a==i) k=k+1; }

printf(\}

3. 分硬币

31. 把一张一元钞票,换成一分、二分和五分硬币,每种至少8枚,问有多少种方案? #include main() {int i,j,k,s=0; for(i=8;i<=50;i++) for(j=8;j<=50;j++) for(k=8;k<=20;k++)

if (i+2*j+5*k==100) s=s+1; printf(\}

14

80

32. 50元的整币兑换成5元、2元和1元币值(三种币值均有、缺少一种或两种都计算在内)的方法有多少种。

146

33. 50元的整币兑换成5元、2元和1元币值(要求三种币值均有)的方法有多少种。

106

34. 马克思曾经做过这样一道趣味数学题:有30个人在一家小饭店里用餐,其中有男人、女人和小孩,每个男人花了3先令,每个女人花了2先令,每个小孩花了1先令,共花去50先令。如果要求男人、女人和小孩都有人参与,试求有多少种方案分配男人、女人和小孩的人数。 9 main() {int i,k=0; int a,b,c;

for(a=1;a<=30;a++) for(b=1;b<=30;b++)

if ((a*3+b*2+(30-a-b)==50)&&(a+b<30)) k++; printf(\}

4. 勾股、弦数

35. A,B,C是三个小于或等于100正整数,当满足1/A^2+1/B^2=1/C^2关系时,称为倒勾股数。求130B>C的倒勾股数有多少组。

main() /*p2_2*/ {int i,a,b,c,n=0; for(c=1;c<=50;c++)

15

1

48 已知24有8个正整数因子(即:1,2,3,4,6,8,12,24),而24正好能被其因子数8整除,求正整数[10,100]之间有多少个正整数能被其因子的个数整除。 #include main() { int x,k=0,i,s; for(x=10;x<=100;x++) { s=0;

for(i=1;i<=x;i++) if (x%i==0) s=s+1; if (x%s==0) k++; }

printf(\}

6.(数列)四舍五入

12

49 当m的值为50时,计算下列公式的值: T=1-1/2-1/3-1/4-…-1/m 要求:按四舍五入的方式精确到小数点后第四位。 50 当m的值为50时,计算下列公式之值: t=1+1/2^2+1/3^2+…+1/m^2

(按四舍五入的方式精确到小数点后第四位)。 main() {int m; float t=0;

21

-2.4992

1.6251

for(m=1;m<=50;m++) t=t+1.0/(m*m); printf(\}

51 当n=100时,计算S=(1-1/2)+(1/3-1/4)+??+(1/(2n-1)-1/(2n))的值。.

要求:按四舍五入的方式精确到小数点后第三位。 52 当n的值为25时,计算下列公式的值: s=1+1/1!+1/2!+1/3!+…+1/n!

要求:按四舍五入的方式精确到小数点后第四位。

2.7183 0.691

53 利用格里高利公式:α/4=1-1/3+1/5-1/7+1/9-1/11+…-1/99,求α的值。要求:按四舍五入的方式精确到小数点后第二位。 main() {int i,b=-1; float a=0;

for(i=1;i<=99;i=i+2) { b=-b; a=a+b*1.0/i; }

printf(\ }

54 求1/(1*2)+1/(2*3)+1/(3*4)+....+1/(N*(N+1))的值,N=20, 要求:按四舍五入的方式精确到小数点后第二位。

0.95 3.12

55 求500以内(含500)能被5或9整除的所有自然数的倒数之和。

22

按四舍五入的方式精确到小数点后第二位。 1.48

56 求S=1/2+2/3+3/5+5/8+……的前30项的和(注:该级数从第二项开始,其分子是前一项的分母,其分母是前一项的分子与分母的和)。要求:按四舍五入的方式精确到小数点后第二位。

18.46

57 设S(n)=1-1/3+1/5-1/7+…1/(2n-1),求S(100)的值,要求S(100)按四舍五入方式精确到小数点后4位。

0.7829

58 当n=50时,求下列级数和:S=1/(1*2)+1/(2*3)+?+1/(n*(n+1)) 要求:按四舍五入的方式精确到小数点后第四位。

0.9804

59 计算y=1+2/3+3/5+4/7+…+n/(2*n-1)的值, n=50, 要求:按四舍五入的方式精确到小数点后第二位。

26.47

60 计算Y=X/1!-X^3/3!+X^5/5!-X^7/7!+……前20项的值(已知:X=2)。要求:按四舍五入的方式精确到小数点后第二位。

0.91

61 求数列:2/1,3/2,5/3,8/5,13/8,21/13,…… 前50项之和(注:此数列从第二项开始,其分子是前一项的分子与分母之和,其分母是前一项的分子)。(按四舍五入的方式精确到小数点后第二位) main()

{int i,fz=2,fm=1,temp; float s=0; for(i=1;i<=50;i++) { s=s+(float)fz/fm; temp=fz; fz=fz+fm; fm=temp; }

23

83.24

printf(\ }

62 已知:A1=1, A2=1/(1+A1), A3=1/(1+A2), A4=1/(1+A3), ……, 求A50.(按四舍五入的方式精确到小数点后第三位)。

0.618

63 已知:Sn=2/1+3/2+4/3+…+(n+1)/n, 求Sn不超过50的最大值(按四舍五入的方式精确到小数点后第三位)。 7.平方数

49.395

64 若一个四位正整数是另一个正整数的平方,且各位数字的和是一个平方数,则称该四位正整数是“四位双平方数”。例如: 由于7396=86^2,且7+3+9+6=25=5^2,则称7396是“四位双平方数”。求所有“四位双平方数”之和。 #include main() {long i,k,s=0; int a,b,c,d;

for(i=1000;i<=9999;i++) { a=i/1000; b=i00/100; c=i0/10; d=i; k=a+b+c+d;

if ((int)sqrt(i)==sqrt(i)&&(int)sqrt(k)==sqrt(k)) s=s+i; } printf(\ }

65 自然数对是指两个自然数的和与差都是平方数,如8和17的和

24

81977

8+17=25与其差17-8=9都是平方数,则称8和17是自然数对(8,17)。假定(A,B)与(B,A)是同一个自然数对且假定A>=B,求所有小于或等于100(即:A<=100,B<=100,A<>B,A和B均不为0)的自然数对中B之和。1160 #include main() {int a,b,s=0; for(b=1;b<=100;b++) for(a=b+1;a+b<=100;a++)

{ if ((int)sqrt(a+b)==sqrt(a+b)&&(int)sqrt(a-b)==sqrt(a-b)) { s=s+b;

printf(\ } }

66 若一个四位正整数是另一个正整数的平方,且各位数字的和是一个平方数,则称该四位正整数是“四位双平方数”。例如: 由于7396=86^2,且7+3+9+6=25=5^2,则称7396是“四位双平方数”。若把所有“四位双平方数”按升序排列,求前10个“四位双平方数”的和。

29690

67 所谓“同构数”是指这样一个数,它出现在它的平方数的右侧,例如5的平方是25,25的平方是625,故5和25都是同构数,求[2,1000]之间所有同构数之和。 #include main() {int i,j,s=0;

for(i=2;i<=1000;i++)

25

1113

for(j=1;j<=6;j++)

if (i*i%((long)pow(10,j))==i) { s=s+i;

printf(\ }

68 自然数对是指两个自然数的和与差都是平方数,如8和17的和8+17=25与其差 17-8=9都是平方数,则称8和17是自然数对(8,17)。假定(A,B)与(B,A)是同一个自然数对且假定A>=B,求所有小于或等于100(即:A<=100,B<=100,A<>B,A和B均不为0) 的自然数对中A-B之差的和。

8.Fibonaci(累加数列)

69 已知 f(n)=f(n-1)+2f(n-2)-5f(n-3),f(0)=1,f(1)=2,f(2)=3,求f(0)+f(1)+…f(30)。

-750874

509

70 已知 f(0)=f(1)=1 f(2)=0 f(n)=f(n-1)-2*f(n-2)+f(n-3) (n>2) 求f(0)到f(50)中的最大值 598325

71 已知Fibonacci数列:1,1,2,3,5,8,??,它可由下面公式表述: F(1)=1 if n=1 F(2)=1 if n=2 F(n)=F(n-1)+F(n-2) if n>2

试求F(2)+F(4)+F(6)+??+F(50)值。 提示: 最好使用递推法求解,因为使用递归调用很可能超出某些语言的递归深度。20365011073 72 已知Fibonacci数列:1,1,2,3,5,8,??,它可由下面公式表述:

26

F(1)=1 if n=1 F(2)=1 if n=2 F(n)=F(n-1)+F(n-2) if n>2

试求F(50)值。 提示: 最好使用递推法求解,因为使用递归调用很可能超出某些语言的递归深度。

12586269025

73 斐波那契数列的前二项是1,1,其后每一项都是前面两项之和,求:10000000以内最大的斐波那契数?

9227465

74 数列 E(1)=E(2)=1

E(n)=(n-1)*E(n-1)+(n-2)*E(n-2) (n>2)

称为E数列,每一个E(n),(n=1,2,?)称为E数。求[1,30000]之内E数的个数。

75 已知 f(0)=f(1)=1

f(2)=0 f(n)=f(n-1)-2f(n-2)+f(n-3) ( n>2 )

求f(0)到f(50)的所有51个值中的最大值(或最小值) '598325 ('-288959)

76 已知Fibonacci数列:1,1,2,3,5,8,??,它可由下面公式表述: F(1)=1 if n=1 F(2)=1 if n=2 F(n)=F(n-1)+F(n-2) if n>2 试求F(1)+F(3)+F(5)+??+F(49)值。

提示: 最好使用递推法求解,因为使用递归调用很可能超出某些语

27

8

言的递归深度。

12586269025

main()

{ float f[50],*p,s; s=0; f[1]=1; f[2]=1;

for(p=f+3;p<=f+49;p++) {*p=*(p-1)+*(p-2); } for(p=f+1;p<=f+49;p+=2) { s=s+*p; }

printf(\ main() {

double f[50],s; int i; s=1; f[1]=1; f[2]=1;

for(i=3;i<=49;i++) {f[i]=f[i-1]+f[i-2];} for(i=1;i<=49;i+=2)

} 28

{ s=s+f[i]; }

printf(\ }

77 已知Fibonacci数列:1,1,2,3,5,8,??,它可由下面公式表述: F(1)=1 if n=1 F(2)=1 if n=2 F(n)=F(n-1)+F(n-2) if n>2

试求F(45)值。 提示: 最好使用递推法求解,因为使用递归调用很可能超出某些语言的递归深度。

1134903170

78 已知一个数列的前三项为0,0,1,以后各项都是其相邻的前三项之和,求该数列前30项之和。

18947744

79 设S=1+1/2+1/3+…1/n,n为正整数,求使S不超过10(S≤10)的最大的n。

80 已知S1=2, S2=2+4, S3=2+4+6, S4=2+4+6+8,S5=2+4+6+8+10,…,求 S=S1+S2+S3+S4+S5+…+S20的值。 main()

{int i,j,s=0,num=0; for(i=1;i<=20;i++) {s=s+2*i;

29

12367

3080

num=num+s; }

printf(\ } 9.a,b,c,d,e类

81 设有十进制数字a,b,c,d和e,它们满足下列式子:abcd*e=bcde (a不等于0, e不等于0或1),求满足上述条件的所有四位数abcd的和。

3665

82 设有十进制数字a,b,c,d和e,它们满足下列式子:abcd*e=bcde (a不等于0, e不等于0或1),求满足上述条件的最大四位数abcd的值。

1999

83 设有十进制数字a,b,c,d和e,它们满足下列式子:abcd*e=bcde (a不等于0, e不等于0或1),求满足上述条件的四位数abcd的个数。 main()

{int i,a,b,c,d,e,k=0; for(i=1000;i<=9999;i++) { a=i/1000; b=i00/100; c=i0/10; d=i;

for(e=2;e<=9;e++)

if (i*e==b*1000+c*100+d*10+e) k=k+1; } printf(\ }

84 有十进制数字a,b,c,d和e,它们满足下列式子:abcd*e=bcde (a

30

2

本文来源:https://www.bwwdw.com/article/p9y6.html

Top