FtSan


私信TA

用户名:ft1075576

访问量:56845

签 名:

等  级
排  名 120
经  验 7578
参赛次数 0
文章发表 24
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

TA的其他文章

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

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 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答

代码解释器

  评论区

可以解释一下如下语块是怎么运行的吗?
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();
	}
请大佬赐教
2020-03-29 23:23:19
#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]);
}
成功
2020-03-16 09:20:40
#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);	
	}
} 
这样子答案我自己测试都是对的,为什么会判错
2020-03-15 17:28:57
成功
int main()
{
    int t(int x),i;
    while(~scanf("%d", &i)){
        if (i == 0)break;
        printf("%d\n", t(i));
    }
    return 0;
}
int t(int x) {
    if (x <= 4)
        return x;
    return t(x-1)+t(x-3);
}
2020-02-29 23:07:33
#include<stdio.h>
int mn(int n)
{
    if((n-3) > 0)
    return mn(n-1)+(n-3);
    else
      return n;
      
      
}
int main()
{
    int n = 0;
    int a[55] = {0};
    int b;
    do{scanf("%d",&a[n]);
        
    }while(a[n++]!=0);
    for(int i=0;i<n-1;i++)
    {
    b=mn(a[i]);
    printf("%d\n",b);
    }
    return 0;
}答案错误%50,是我那点没考虑到么,求解决
2020-02-29 16:40:27
#include<stdio.h>
int f(int n)
{
	if (n >= 1 && n <= 4)
		return n;
	else
		return f(n - 1) + f(n - 3);
}
int main()
{
	int s=0, i,n;
	scanf("%d", &n);
	for (i = 1; i <= n; i++)
	{
		s =s+f(i);
	}
	printf("%d", s);
}
为什么答案错误
2020-02-16 16:48:25
#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;
}
这个为什么不对啊
2020-02-15 21:57:52
#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次都是错的。
2020-02-13 20:03:02