五道帖子题!
这个是我在论坛上看见一位朋友发的帖子,总共有五道题,下面是我做的答案,本想回复在该朋友的帖子上,但是我没有找到这位朋友的帖子,所以只好我自己发表了!不知道我写的程序时否好,欢迎大家指正!题目:
1,输入2个正整数a和n,求a+aa+aaa+aa····a(n个a)之和。例如输入2和3,输出246(2+22+222)
(输入输出提示例Input a,n:8 5)
s=98760
程序代码:
double fun(int i); #include<stdio.h> main() { int a,n,i; double sum=0,sum_1=0; puts("Enter a & n:"); scanf("%d%d",&a,&n); for(i=0;i<n;i++){ sum+=a*fun(i); sum_1+=sum; } printf("%.0lf",sum_1); return 0; } double fun(int i) { double result; if(i==0) result=1; else result=10*fun(i-1); return result; }
2,皮球从height米得高度自由落下,接触地面后反弹到原高度的一半,再落下,再反弹,如此反复。皮球在n次落地时,在空中经过的路程是多少米?第n次反弹的高度是多少?(输出保留1位小数)
(输入输出示例Input height:10
Input n:2
distance=25.0
height=2.5)
程序代码:
#define NUMBER 2 double fun(int n,int number); #include<stdio.h> main() { int n,i; double distance,height,start_height; puts("Input start_height & n:"); scanf("%lf%lf",&start_height,&n); distance=start_height; height=start_height/fun(n,NUMBER); for(i=1;i<=n;i++){ start_height=start_height/2; distance+=start_height*2.0; } printf("%.1lf\n%.1lf",distance,height); return 0; } double fun(int n,int number) { double sum; if(n==0) sum=1; else sum=number*fun(n-1,number); return sum; }
3,输入2个正整数m和n(m>=1,n<=500),输出m和n之间的所有素数,每输出6个。素数是指只能比1和自身整除的正整数,最小的素数是2.
(输入输出示例Input m:1
Input n:35
2 3 5 7 11 13
17 19 23 29 31)
程序代码:
int Sushu_(int i); #include<math.h> #include<stdio.h> main() { int m,n,i; puts("Enter tow number m & n(m>=1,n<=500,m<=n):"); scanf("%d%d",&m,&n); if(m>n) fprintf(stderr,"Error of Input OVER"); for(i=m;i<=n;i++) if(Sushu(i)==1) printf("%-6d",i); return 0; } int Sushu(int i) { int result=0,j; if(i==1) return result; for(j=2;j<=(int)sqrt(i);j++) if(i%j==0) break; if(j>(int)sqrt(i)) result=1; return result; }
4,将一笔钱(大于8分,小于1元,精确到分)换算成1分,2分和5分的硬币组合。输入金额。问有几种换算方法?针对每一种换算方法,输出各种面额的硬币数量,要求每种硬币至少有一枚。
(输入输出示例Input money:10
count=2
fen5:1 fen2:2 fen1:1
fen5:1 fen2:1 fen1:3)
程序代码:
#include<stdio.h> main() { int money,one_number=1,two_number,five_number; puts("Input the count of money(money>8&&money<100):"); scanf("%d",&money); for(five_number=1;five_number<=money/5;five_number++) for(two_number=1;two_number<=money/2;two_number++) for(one_number=1;one_number<=money;one_number++) if(5*five_number+2*two_number+one_number==money) printf("fen5:%d fen2:%d fen1:%d\n",five_number,two_number,one_number); return 0; }我没有想出能够降低时间度的方法!
5,输入2个正整数m和n(m>=1,n<=1000),输出m和n之间的所有水仙花数。水仙花数是指各位数字的立方和等于其自身的数。例如,153的各位数字的立方和是1*1*1+5*5*5+3*3*3=153.
(输入输出示例Input m:100
Input n:400
153 (1*1*1+5*5*5+3*3*3=153)
370 (3*3*3+7*7*7=370)
371 (3*3*3+7*7*7+1*1*1=371)
程序代码:
int RETURN_SHUXIANHUASHU(int number); #include<stdio.h> main() { int n,m,count; puts("Input m & n:"); scanf("%d%d",&m,&n); for(count=m;count<=n;count++){ if(RETURN_SHUXIANHUASHU(count)==1) printf("%-8d",count); } return 0; } int RETURN_SHUXIANHUASHU(int number) { int sum=0,k,a,j=0; k=number; while(number!=0){ a=number%10; sum+=a*a*a; number/=10; } if(sum==k) j=1; return j; }