这个题目挺有意思的,我主要用了“斐波那契数列”的知识来解答的,但是发现了问题。

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];
		}
	   
	}
}


点赞(286)
 

0.0分

124 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 156 条评论

fdasf 4年前 回复TA
#include<stdio.h> 
int main()
{
	int year;
	int cow=6;
	int i;
	while(scanf("%d",&year)){
		if(year==0){
			return 0;
		}else if(year<=4){
			printf("%d\n",year);
		}else if(year==5){
			printf("%d\n",6);
		}
		else{
			for(i=5;i<year;i++){
				cow+=i-2;	
			}
			printf("%d\n",cow);
			
		}
}
	return 0;
}
这个为什么不对啊
Fabious 4年前 回复TA
#include<stdio.h>
void add(int a[]){
	for(int i = 0; i < 55; i++){
		if(i<4)
			a[i] = i+1;
		else a[i] = a[i-1] + a[i-3];
	}
}
int main(){
	int a[55], b[55];
	int i = 0;
	add(a);
	while(1){
	    scanf("%d",&b[i]);
	    if(b[i] == 0)
	    	break;
	    i++;
	}
	for(int j = 0; j < i; j++){
		printf("%d\n",a[b[j] - 1]);
	}
	return 0;
}
同样刚开始用的是递归,然后超时了,后面也是把斐波那契数列先存入一个数组里面。
比较少刷题,没注意看那个输出要求,一开始没换行,没有按照要求输出,致交了N次都是错的。
Solotravel 5年前 回复TA
@Solotravel 搞错了,请忘记
Solotravel 5年前 回复TA
@Solotravel 搞错了,请忘记
Solotravel 5年前 回复TA
递归,计算第N年母牛的函数,可参考一下:
int CountCow(int n)
{
	if(n<0) return 0;
	else if(n>0&&n<=4) return n;
	else return (n-3)+CountCow(n-1);
}
月曜日 5年前 回复TA
@月曜日 为什么我超限
月曜日 5年前 回复TA
#include"stdio.h" 

int main()
{
	int n;
	while(scanf("%d",&n)){
		int i=0;
		int a[55];
		for(i=0;i<n;i++){
			if(i<4){
				a[i]=i+1;
			}
			else{
				a[i]=a[i-1]+a[i-3];
			}
		}
		printf("%d\n",a[i-1]);
	}
    return 0;
}

我哪里有错吗?
_ 5年前 回复TA
用VS2019本地调试, 断点打在main里的for那, 结果程序死循环, 不到那
拿去网页提交结果通过
搞不懂
DR 5年前 回复TA
@为你一笑痴狂 你这个除了输入规则有问题外,答案也是错的,你的前四年是每年加一,后面是每次加1加2加3这样递增上去的,是少考虑了情况,只适用于到地八年,每四年他们的小母牛就成熟了
skaki 5年前 回复TA
@12039 那就是说n>3就算得第四个年头了吧?