原题链接:[递归]母牛的故事
这个题目挺有意思的,我主要用了“斐波那契数列”的知识来解答的,但是发现了问题。
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分
124 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
#include <stdio.h> int number(int n); int main() { int n,gennumber[100]={0,1,1,1,1},total=0,i; scanf("%d",&n); if(n<55 && n>0){ for (i=1;i<=n;i++) { gennumber[i]=number(i); total=total+gennumber[i]; } printf("%d\n",total); } else if (n==0) ; else printf("error\n"); return 0; } int number(int n) { int num; if (n<=4) num=1; else num=number(n-1)+number(n-3); return num; } 为什么答案错误了 求解@煮酒老麦 input[i++]存储输入值,输入为0时跳出;你给的程序问题在于int a[55]={1};只有a[0]=1,后面数组a的值都为0,输入第一个值后,i++,i=1,a[1]=0就会跳出循环,不满足循环条件。个人小白尝试修改: for (i = 0; input[i] != 0; i++) { scanf("%d", &input[i]); if (input[i]==0) { break; } input[i + 1] = 1; getchar(); }可以解释一下如下语块是怎么运行的吗? int i = 0; do { scanf("%d",&input[i]); }while(input[i++] != 0); 为啥我这样不可以: int a[55]={1}; int i; for(i=0;a[i]!=0;i++){ scanf("%d",&a[i]); getchar(); } 请大佬赐教#include <stdio.h> main(){ int n,i; int a[55]={0,1,2,3}; for(i=4;i<55;i++) a[i]=a[i-1]+a[i-3]; while(~scanf("%d",&n)) if(n==0) return ; else printf("%d\n",a[n]); } 成功#include <stdio.h> int main() { int n,sum,s,i,j,a[55]; sum=1; s=0; scanf("%d",&n); if (n==0) { printf("\n"); } else if(n<=4) { sum=n; printf("%d",sum); } else if(n>=5) { sum=sum+4; a[0]=1; a[1]=1; a[2]=1; a[3]=1; a[4]=1; for (i=1;i<=n-4;i++) { s=a[0]; for(j=1;j<=i;j++) { s=s+a[j]; } a[i+4]=s; sum=sum+s; } printf("%d",sum); } } 这样子答案我自己测试都是对的,为什么会判错