解题思路:
1:把斐波纳契数列,分为两部分,前面的两个1,以及后面的部分,把这两部,分开输出;
2:输出个数为1,则输出:1,输出个数为2,则输出:1''空格''1;
3:输出个数大于2小于等于40,则先输出:1"空格"1"空格 " ,后面的数根据规律(等于前面两个数的和)输出 ;
4:把最后一个数分离出来输出,最后一个数后面不带空格;
令前两个数为A=1,B=1;
后面一个数就为A+B=2;
这时前两个数要更新为A=1,B=2;
#include<stdio.h> int main() { int A=1,B=1,C,N; scanf("%d",&N); if((N>2)&&(N<=40)) { printf("%d %d ",A,B); for(int i=0;i<N-3;i++) { printf("%d ",A+B); C=A; A=B; B=C+B; } printf("%d",A+B); } if(N==1) printf("%d",A); if(N==2) printf("%d %d",A,B); }
思路二:根据斐波纳契数列公式:
#include <stdio.h> #include <math.h> int function( int i ); int main() { int N; scanf( "%d", &N ); for ( int i = 1; i <= N - 1; i++ ) printf( "%d ", function( i ) ); printf( "%d", function( N ) ); return(0); } int function( int i ) { double sqrt_five = sqrt( 5.0 ); double pow1 = pow( ( (1.0 + sqrt( 5.0 ) ) / 2.0), i ); double pow2 = pow( ( (1.0 - sqrt( 5.0 ) ) / 2.0), i ); int number = 1.0 / sqrt_five * (pow1 - pow2); return(number); }
喜欢按个赞哦-.-
0.0分
6 人评分
#include<stdio.h> int main(){ int a=1,b=1,c,N,i; scanf("%d",&N); if((N>2)&&(N<=40)) { printf("%d %d ",a,b); for(i=0;i<N-3;i++) { printf("%d ",a+b); c=a; a=b; b=b+c; } } printf("%d",a+b); if(N==1) printf("%d",a); if(N==2) printf("%d %d",a,b); return 0; } 这个哪里错了呀
#include<stdio.h> int main() { int n,i; scanf("%d",&n); int f1=1,f2=1,f3; printf("%d %d ",f1,f2); for(i=3;i<=n;i++){ f3=f1+f2; printf("%d ",f3); f1=f2; f2=f3; } return 0; } 看这个,刚才那个没复制全
Manchester 2020-04-07 13:45:52 |
n=1 n=2 时 这两种亲情况 用数组存结果更好理解如A[i]=A[i-1]+A[i-2]
printf("%d %d ",f1,f2); for(i=3;i<=n;i++){ f3=f1+f2; printf("%d ",f3); f1=f2; f2=f3; } 错误14%,大佬看一下哪里有问题
C语言程序设计教程(第三版)课后习题7.1 (C语言代码)浏览:611 |
a+b浏览:432 |
蚂蚁感冒 (C语言代码)浏览:1319 |
母牛的故事 (C语言代码)浏览:940 |
1118(求助_已解决)浏览:329 |
1048题解(读入回车问题)浏览:554 |
简单的a+b (C语言代码)浏览:944 |
勾股数 (C语言代码)浏览:799 |
C语言程序设计教程(第三版)课后习题12.2 (C语言代码)浏览:753 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:382 |