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

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 条评论

itearl 5年前 回复TA
#include <stdio.h>
int fun(int year){
	int num;
	if(year <= 4){
		num = year; 
	}
	else{
		num = fun(year - 1) + fun(year - 3);
	}
	return num;
}


int main(){
	int year,num;
	while(scanf("%d",&year) != EOF)
	{
		num = fun(year);
		if(year == 0)
		return 0;
		else
		printf("%d\n",num);
	}	

	return 0;
} 
蓝桥杯都是多组数据,不知道的可以去看看规则。
秃头阿浪 5年前 回复TA
题解输出的时候不用再判断是否大于4了,子函数全算过了。
Horace 5年前 回复TA
也没说有多少组数据。。怎么定义数组下标啊
Dio 5年前 回复TA
@为你一笑痴狂 输出并不符合题目的输出要求
为你一笑痴狂 5年前 回复TA
求助这个为什么是错的
#include <stdio.h>
#include <stdlib.h>
void main (void)
{ 
  int  n ,m,b;

scanf("%d(0-55)",&n);
if(n<5)
	if(n<1)
		exit(0);
	else
for(b=0,m=0;b<n;b++)
 { 
   m=m+1;
}
else 
for(b=4,m=5;b<n;b++)
{ 
	m=m+b-3;
}
printf("在第%d年的时候母牛的数量是%d",n,m);


}
为你一笑痴狂 5年前 回复TA
#include <stdio.h>
#include <stdlib.h>
void main (void)
{ 
  int  n ,m,b;

scanf("%d(0-55)",&n);
if(n<5)
	if(n<1)
		exit(0);
	else
for(b=0,m=0;b<n;b++)
 { 
   m=m+1;
}
else 
for(b=4,m=5;b<n;b++)
{ 
	m=m+b-3;
}
printf("在第%d年的时候母牛的数量是%d",n,m);


}
小菜给您拜年啦 5年前 回复TA
@清弦未歇 你的格式不对啊 输出要换行的 而且输入的数据要连续输入
清弦未歇 5年前 回复TA
求助,不知为何是错的

#include<stdio.h>

int add(int n)
{
	if(n<=4)
		return n;
	else
		return (add(n-1)+add(n-3));
}

void main()
{
	int n,sum;
	scanf("%d",&n);
	sum=add(n);
	printf("%d",sum);
}
junzilan 5年前 回复TA
@12039 第4个年头,你算成第5个年头了
junzilan 5年前 回复TA
@煎饼不夹火腿 n=0时你处理了,题目要求不做处理