这个题目挺有意思的,我主要用了“斐波那契数列”的知识来解答的,但是发现了问题。
1、我用了函数递归来解题,导致时间超时,问题是由于每次解答一题要递归好几次。
2、题目中的 0<n<55头牛的条件没用上,所以换个思路,先循环一次把到55头牛在斐波那契数列中的排列记录下来,之后解题时候调用数列就快了很多。
结果在网页编译通过,答题正确。
#include<stdio.h> #define N 55 int monther_cow[N]; void monther_cow2(int n); int main() { int input[N]; monther_cow2(N); int i = 0; do { scanf("%d",&input[i]); }while(input[i++] != 0); for(int j = 0 ; j < i-1 ; j++) { if( input[j] < 4) { printf("%d\n",monther_cow[input[j]]); } else { printf("%d\n",monther_cow[input[j] - 1] + monther_cow[input[j] - 3] ); } } return 0; } void monther_cow2(int n)//记录的斐波那契数列中对应的规律到数列 { int i; for(i = 1 ; i <= n ; i++) { if( i < 4) { monther_cow[i] = i; } else { monther_cow[i] = monther_cow[i - 1] + monther_cow[i - 3]; } } }
0.0分
179 人评分
#include <stdio.h> int count(int n){ if (n<5) { return n; } return count(n-1)+count(n-3); } int main() { // insert code here... // printf("input \n"); int beef[55]; int input; int index = 0; do{ scanf("%d",&input); beef[index] = input; index++; }while (input != 0); for (int i = 0;i<index-1;i++) { printf("%d\n",count(beef[i])); } return 0; }
#include<stdio.h> int main() { int niu(int n); int n; while(scanf("%d",&n)&&n&&n>=0) { niu(n); printf("%d\n",niu(n)); } return 0; } int niu(int n) { if(n<=3) return n; else return niu(n-1)+n-3; } 我算了下貌似都是对的啊,哪里错了。。。 求大佬指点
nlq 2019-02-06 16:22:41 |
好吧,我太蠢了,算都算错了
#include<stdio.h> int main() { int n,i,j=1;//n是年份,i是第几年,j是母牛的数量 scanf("%d",&n); for(i=1;i<=n;i++) { if(i<=4) j=i; if(i>4&&i<=8) j=i*2-4; if(i>8&&i<=12) j=i*3-12; if(i>12&&i<=16) j=i*4-24; if(i>16&&i<=24) j=i*5-40; if(i>24&&i<=28) j=i*6-64; if(i>28&&i<=32) j=i*7-92; if(i>32&&i<=36) j=i*8-124; if(i>36&&i<=40) j=i*9-160; if(i>40&&i<=44) j=i*10-200; if(i>44&&i<=48) j=i*11-244; if(i>48&&i<=52) j=i*12-292; if(i>52&&i<55) j=i*13-344;} printf("%d",j);} 这个貌似可以,但是麻烦不少
这是名字叫#的作者写的我觉得简单得多,其实这道题不用折磨麻烦 #include <stdio.h> int main(void){ int a[54]={1,2,3,4},n,i; for(i=4;i<54;i++) a[i]=a[i-1]+a[i-3]; scanf("%d",&n); while(n!=0){ printf("%d\n",a[n-1]); scanf("%d",&n); } return 0; }
萌新小萌新 2019-01-21 13:16:07 |
不过你要是就是想用调用函数解决问题就另当别论了
路小雨 2019-01-27 09:00:35 |
简洁明了,厉害
火火 2019-01-28 14:41:06 |
我能说我也有这种水平吗(一个恬不知耻的学长)
咸鱼本咸 2019-03-03 16:44:38 |
为什么 我跟你的差不多 他说我超出权限啊 超出权限是什么错啊..
asdasdeqwe 2019-03-13 10:07:48 |
@simonx 一个错答案你也舔我也是笑死,第一年年初生一只 1+1=1么?
菜鸟小小 2019-04-02 15:09:42 |
@xzxstc1999 第一年年初,直接就输出a[0]=1,所以是正确的答案。如果将数组定义为a[55],第n年输出a[n]会更好理解一点。但是要将a[0]定义为0之类的
为什么我在CLODEBLOCKS上运行是错的?
我不太明白为什么要调用那个返回值为空的函数,有大佬明白吗
一大勺猪油 2018-12-19 08:14:34 |
调用一个函数并不一定是需要它的返回值,事实上如果不将返回值赋给左值,就完全没必要有返回值。
MusaGeek 2018-12-26 19:42:35 |
修改全局变量的数组
过往的曾经 2019-01-06 21:01:40 |
楼主是想先把数列给做好,然后根据输入的数据直接调用。打个比方,楼主先一股脑儿把菜都做完然后排好,最后再根据需要直接取,这样就不用现做现取了.
grassCarp7 2019-01-08 20:08:43 |
这个是记忆化搜索+递推,先构建好fibonacci数列的值。这是最快的方法之一。
酷酷哒的乔治 2019-01-22 15:08:01 |
我还是没懂为什么是空函数最后可以输出来一个值??!有大佬吗
风口的猪 2019-05-08 15:35:23 |
我也没懂,为什么调用那个函数
#define N 55 int monther_cow[N]; void monther_cow2(int n)//记录的斐波那契数列中对应的规律到数列 { int i; for(i = 1 ; i <= n ; i++) { if( i < 4) { monther_cow[i] = i; } else { monther_cow[i] = monther_cow[i - 1] + monther_cow[i - 3]; } } } int main() { int input[N]; int j,i = 0; monther_cow2(N); do { scanf("%d",&input[i]); } while(input[i++] != 0); for(j = 0;j < i-1;j++) { printf("%d\n",monther_cow[input[j]]); } 根据作者的思路修改了一下
震宇大神的杀毒软件 (C语言代码)浏览:1240 |
C语言程序设计教程(第三版)课后习题7.3 (C语言代码)浏览:572 |
拆分位数 (C语言代码)浏览:1326 |
C语言程序设计教程(第三版)课后习题6.7 (C语言代码)浏览:518 |
C语言训练-计算t=1+1/2+1/3+...+1/n (C语言代码)浏览:904 |
Wu-求圆的面积 (C++代码)浏览:1883 |
用筛法求之N内的素数。 (C语言代码)浏览:802 |
C语言程序设计教程(第三版)课后习题6.9 (C语言代码)浏览:626 |
C语言程序设计教程(第三版)课后习题6.1 (C语言代码)浏览:545 |
用筛法求之N内的素数。 (C语言代码)浏览:664 |
舞幽 2019-04-02 11:03:37 |
#include<stdio.h> int main() { int cow,n,i; printf("请输入老母牛的生存时间:"); scanf("%d",&n); if(n<=4&&n>=0) cow=n; else { for(i=4;i<n;i++) cow=i-2; cow=cow+4; } printf("母牛的数量为:%d\n",cow); return 0; }
舞幽 2019-04-02 11:04:00 |
弄错了