标签:自己的 img ntp 条件 alt ... 次数 log 个数
(9)if( narcissistic(i) )调用上一个函数 ,判断i是否为水仙花数
printf("%d",i);printf("\n")如果是输出这个数,并换行。
(1)当时在编译这题时,一开始就打算用cnt 来计算number的值。
可是在做题目时一直根据题目给的值153,就把在第4步时把那个cnt输成了3
结果一直导致部分正确。
其中大于三位数后水仙花数就输不出来
(2)还有一个问题就是在判断完它是水仙花数后不知道要怎样返回这个值。
后开尝试用了下return 1就可以了,运气有些好。
(13)再循环外进行一个判断语句如果cnt=0则输出No Fibonacci number。
对于行末不能保留空格一开始没有注意到,所以只在其为空集时正确了
于是我在输出空格前进行了一次判断,如果fib(i+1)<n则说明这个数是区间内倒数第二个数,那么在下一个数的后面就不要再输出空格。
可是,还有错误就是两端点都是F数,测试超过区间的fib不满足条件
所以我就再看了下题目题目中如果m,n是Fibonacci数那么他也是需要输出的。所以在)if(fib(i+1)<n)中加了一个=。就满足条件。
本题要求实现一个计算整数因子和的简单函数
(11)进行一个判断if(a==1)就printf("No perfect number")
这道题的难点在于 完数 = 因子1 + 因子2 + ... + 因子k 这个格式的输出怎样才能让它正确输出因子的同时,又正确的输出+与空格。
经过观察每个数必有因子1," + %d",j 在以这样的格式一个个输出,我一开始是在每个数的后面加空格,这样导致行末出现空格,
后来经过一个同学的提点,把空格放在+的前面这样就不会在行末出现空格。
行末出现空格
int fib( int n )
{
int a=1,b=1,i;
if(n==1 || n==2){//如果n=1,2时F数都为1
return 1;
}
for(i=3;i<=n;){
a=a+b;//让前两个数相加得到一个新的数
i=i+1;
b=b+a;
i++;
}
if(n%2==0){//判断奇偶数
return b;
}
else{
return a;
}
}
void PrintFN( int m, int n )
{
int cnt=0,i,j;
for(i=1;fib(i)<=n;i++){
if(fib(i)>=m){
printf("%d",fib(i));
if(fib(i+1)<=n){
printf(" ");
}
cnt=1;
}
}
if(cnt==0){
printf("No Fibonacci number");
}
}
int fib( int n )
{
int result=0,i,a=1,b=1;
if(n==1)return 1;
for(i=2;i<=n;i++)
{
result=b;
b=b+a;
a=result;
}
return result;
}
void PrintFN( int m, int n )
{
int f,i,flag=0,c=0;//f放完数,i控制循环,利用flag判断是否有完数,c,判断是否为第一个数
for(i=1;i<=100;i++)
{
f=fib(i);
if(f>=m&&f<=n)//完数在所给范围内
{
c++;
flag=1;
if(f==1&&m==1&&i==1)//起始点为1比较特殊,直接输出1
{
printf("1");
continue;
}
if(c==1)//第一个数前面没有空格,所以单独输出
{
printf("%d",f);
continue;
}
printf(" %d",f);
flag=1;
}
}
if(flag==0)//没有完数,则flag还是为0,输出。
printf("No Fibonacci number");
}
不同点:我和炳炜同学在定义fib函数的做法不一样,我是让n从三开始进行循环a=a+b,i++,b=b+a,i++当n为奇数时其F数再a上,
偶数时F数再b上。
而炳炜同学是在定义一个变量来存放fib数,result=b; b=b+a; a=result它的循环是从2开始先让result=b,每次都让b=b+a,又再将a=result
这样同样巧妙的将前两个数的和放到了result上
优势:1:我的代码在一步的循环中就能计算多个F数,剪短了循环的时间,并且我不用多定义一个变量也节省了空间。
而,炳炜同学的代码比较精炼,不需要在后面做判断,直接返回result,而我的有两个出口。
2:在第二个函数上,我觉得我的优势会更大,在第一个循环我结束的条件是fib(i)<=n而炳炜同学i<=100,这样 它循环的次数就会更多,时间更长。
然后为了避免在行末输出空格if(fib(i+1)<=n) printf(" ");我是来找nm 区间内的倒数第二个数,而他是让第一个数单独输出,还要多设计一个数来判断区间内的第一个数
总之,它的代码使用的空间和时间都用的比我多。
所以,我会更喜欢我自己的代码。
标签:自己的 img ntp 条件 alt ... 次数 log 个数
原文地址:http://www.cnblogs.com/1028-zwj/p/7858323.html