五道帖子题!
这个是我在论坛上看见一位朋友发的帖子,总共有五道题,下面是我做的答案,本想回复在该朋友的帖子上,但是我没有找到这位朋友的帖子,所以只好我自己发表了!不知道我写的程序时否好,欢迎大家指正!题目:
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;
}









