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

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分

183 人评分

  评论区

n是年数不是牛头数吧
2020-11-11 09:36:38
#include<stdio.h>
int add(n)
{
	if(n<4)
	return n;
	else
	return add(n-1)+add(n-3);
}
int main()
{
	int n;
	while(~scanf("%d",&n)!=0)
	printf("%d\n",add(n));
	
}
求指教,为什么这个通不过
2020-09-15 18:57:12
#include<stdio.h>
int f_s(int n,int f[])
{
	int i=0;
	f[1]=1;
	f[2]=2;
	f[3]=3;
	for(i=4;i<n;i++){
		f[i]=f[i-1]+f[i-3];
	}
	return f[n];
}
int main(){
    
	int n[55]={0};
	int f[55]={0};
	int i=0;
	int k=0;
	for(i=0;i<55;i++)
    {
    	scanf("%d",&n[i]);
    	if(n[i]==0)
    	break;
    	k++;
	}
	for(i=0;i<k;i++)
	{
		printf("%d\n",f_s(n[i],f));
	 } 
} 
为啥不对求指教
2020-09-01 12:37:41
#include <stdio.h>
int main(void)
{
	int a, b, c, d, e;
	
	int i, t, n;
	while(~scanf("%d", &n))
	{
		if (n < 55 && n > 0)
		{
			a = 0;
			b = 1;
			c = 0;
			d = 0;
			e = 0;
			for (i = 1; i <= n; ++i)
			{
				a = b + c + d + e;
				b = b + c;
				t = b;
				c = d;
				d = e;
				e = t;
			}
			printf("%d\n", a);
		}
	}
	return 0;
}
2020-08-12 22:36:03
#include<stdio.h>
int main() {
    int n, l, k = 0, m = 0, i = 1;
    int s[55];
    do{
        scanf("%d", &n);
        if(n > 0 && n < 55) {
            while(n > 0) {
                if(n <= 4) {
                    m = n;
                    break;}
                else if(n > 4) {
                    m = ((n-1)*(n-4))/2+4;
                    break;}
            }
            s[k] = m;
            k++;
        }
        else if(n = 0) {
            break;}
    }while(n != 0);
    for(l = 0; l < k; l++) {
        printf("%d\n", s[l]);}
    return 0;
}
答案错误5555,求哥哥们指点迷津啊。
2020-05-12 01:09:13
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;
}
为什么要 input[i++]!=0  j<i-1 ,我写成 input[i]!=0  j<i 编译没错 但结果是错的,没有输出结果
2020-04-29 17:43:41
dowhile 
下面那个for里面可以直接写  mother_cow[ input[j] ];
2020-04-20 10:39:41
#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;
}

为什么答案错误了
求解
2020-04-18 18:33:47