#include<stdio.h>
void puts(double );
#include<math.h>
void main()
{
int n;
scanf("%d",&n);
if(n==1)
printf(" ");
else
puts(n-1);
}
void puts(double n)
{
int i,k;
for(i=0;;i++)
{
if(pow(2,i)-1>=n)
break;
}
i--;
k=pow(3,i);
printf("%d ",k);
n=n-pow(2,i);
if(n>=1)
puts(n);
}
我测试了1,2,4,6,200,500;答案都是对的
第一个题目我不是很明白,我想用动态数组来解决多行的问题,但是我想题目不会这么简单吧
----------------解决方案--------------------------------------------------------
最好不要使用递归,效率不高.
第一个其实很简单,不要想那么复杂,数组就可以的.只要达到题目的要求就行.
----------------解决方案--------------------------------------------------------
楼主,这是我写的,第一次参加讨论,从一发上来就开始想了
#include<stdio.h>
void puts(double );函数名冲突.
#include<math.h>
void main()
{
int n;
scanf("%d",&n);
if(n==1)
printf(" ");
else
puts(n-1);
}
void puts(double n)
{
int i,k;
for(i=0;;i++)
{
if(pow(2,i)-1>=n)
break;
}
i--;
k=pow(3,i);
printf("%d ",k);
n=n-pow(2,i);
if(n>=1)
puts(n);
}
我测试了1,2,4,6,200,500;答案都是对的
第一个题目我不是很明白,我想用动态数组来解决多行的问题,但是我想题目不会这么简单吧
算法没什么问题,应该是这样了.把数据范围加大一点.
----------------解决方案--------------------------------------------------------
把里面的int换成long double够吗?
----------------解决方案--------------------------------------------------------
#include "math.h"
int num=1;
int qu(int n)
{
int a=2,b=3,t;
num=1;
while((n-b)>(b-a))
{
t=b;b+=a;
a=t;num++;
}
return(b) ;
}
main()
{
int i,j,n,m;
scanf("%d",&n);
if(n==1) printf("{ }\n");
else if(n==2) printf("{1}\n");
else if(n==3) printf("{3}\n");
else
{
j=qu(n);m=pow(3,num);
printf("{%d",m);
for(i=n-j;i;i--)
{
m=pow(3,i-1);
printf(",%d",m);
}
printf("}");
}
getch();
}
[此贴子已经被作者于2007-3-13 17:09:33编辑过]
----------------解决方案--------------------------------------------------------
#include "stdio.h"
#include "math.h"
main()
{
int point,number=0,check_num,i,times=0;
clrscr();
printf("please put in the number which you want to see---");
scanf("%d",&point);
point=point-1;
if(point==0)
{
printf("null\n");
}
else if(point<0)
{
printf("waring please put in num which BIGGER than 0");
}
else
{
while(point!=0)
{
check_num=0;times=0;
for(i=0;check_num<=point;i++)
{
check_num=pow(2,i);times=i;
}
check_num/=2; times=times-1;
number=pow(3,times);
printf(" %4d",number);
point=point-check_num;
}
}
getch();return(0);
}
写出来了,刚写的
----------------解决方案--------------------------------------------------------
根据我自己写的,给出一些随机测试数据.大家顺便帮忙检查一下,谢谢.
2345
{ 177147, 6561, 243, 27 }
23545
{ 4782969, 531441, 177147, 19683, 6561, 2187, 729, 243, 81, 27 }
9762
{ 1594323, 59049, 19683, 243, 1 }
12980
{ 1594323, 531441, 19683, 2187, 243, 81, 3, 1 }
123456
{ 43046721, 14348907, 4782969, 1594323, 19683, 243, 81, 27, 9, 3, 1 }
32417
{ 4782969, 1594323, 531441, 177147, 59049, 19683, 2187, 243 }
865273
{ 9 }
86527
{ 43046721, 4782969, 531441, 6561, 2187, 729, 243, 81, 27, 9, 3 }
34286
{ 14348907, 59049, 6561, 2187, 729, 243, 27, 9, 1 }
23
{ 81, 9, 3 }
41
{ 243, 27 }
78
{ 729, 27, 9, 1 }
852
{ 19683, 6561, 729, 81, 3, 1 }
135
{ 2187, 9, 3 }
97
{ 729, 243 }
2345
{ 177147, 6561, 243, 27 }
23545
{ 4782969, 531441, 177147, 19683, 6561, 2187, 729, 243, 81, 27 }
9762
{ 1594323, 59049, 19683, 243, 1 }
12980
{ 1594323, 531441, 19683, 2187, 243, 81, 3, 1 }
123456
{ 43046721, 14348907, 4782969, 1594323, 19683, 243, 81, 27, 9, 3, 1 }
32417
{ 4782969, 1594323, 531441, 177147, 59049, 19683, 2187, 243 }
86527
{ 43046721, 4782969, 531441, 6561, 2187, 729, 243, 81, 27, 9, 3 }
34286
{ 14348907, 59049, 6561, 2187, 729, 243, 27, 9, 1 }
23
{ 81, 9, 3 }
41
{ 243, 27 }
78
{ 729, 27, 9, 1 }
852
{ 19683, 6561, 729, 81, 3, 1 }
135
{ 2187, 9, 3 }
97
{ 729, 243 }
8
{ 9, 3, 1 }
500
{ 6561, 2187, 729, 243, 81, 3, 1 }
11
{ 27, 3 }
16
{ 27, 9, 3, 1 }
----------------解决方案--------------------------------------------------------
我输出和斑竹的一样,怎么没有人做第一个啊?
----------------解决方案--------------------------------------------------------
虽然你和我的算法和我一样,但是我觉得你比我写的好,你没有用递归
----------------解决方案--------------------------------------------------------
----------------解决方案--------------------------------------------------------