伪君子


私信TA

用户名:lbj

访问量:92950

签 名:

我觉得吧,能实现就好^_^

等  级
排  名 46
经  验 12166
参赛次数 0
文章发表 23
年  龄 20
在职情况 学生
学  校 山西工程技术学院
专  业

  自我简介:

个人博客:https://lbjheiheihei.xyz 微信公众号:伪君子的梦呓


题目:



描述:

有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第 n 年的时候,共有多少头母牛?


输入:

输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数 n(0<n<55),n 的含义如题目中描述。

n=0 表示输入数据的结束,不做处理。


输出:

对于每个测试实例,输出在第 n年的时候母牛的数量。

每个输出占一行。


分析



我们先列出一个表格,把每一年对应的母牛数量写出来。


第 n年:12345678
f[n] 头牛:1
23469
1319


先看第 4 年,对应有 4 头母牛,4 = 3+1;
再看第 5 年,对应有 6 头母牛,6 = 4+2;
最后看第 6 年,对应有 9 头母牛,9 = 6+3;


没错,是有规律的,该年母牛的数量就是一年前的数量再加上三年前的数量,

用公式表示就是 f[n] = f[n-1] + f[n-3]


参考代码:



迭代法:

先给出用迭代法的代码,因为它长

#include<iostream>
using namespace std;
int main()
{
    int n, i;
    int f1, f2, f3, fn;
    while (cin >> n && n != 0)  //输入 n 的值,且 n 不等于0,则进入,否则退出
    {
        f1 = 1;
        f2 = 2;
        f3 = 3;
        if (n == 1)
            cout << f1 << endl;
        else if (n == 2)
            cout << f2 << endl;
        else if (n == 3)
            cout << f3 << endl;
        else
        {
            for (i = 4; i <= n; i++)
            {
                fn = f3 + f1;  
                //把该年迭代为一年前,一年前迭代为两年前,依次类推
                f1 = f2;  //f1代表 3 年前
                f2 = f3;  //f2代表 2 年前
                f3 = fn;  //f3代表 1 年前
            }
            cout << fn << endl;  //fn
        }
    }
    return 0;
}

数组:

最后给出用数组的,用数组相对来说会好一点,因为迭代一次,然后就可以输出了。上面那个代码每输入一个数都需要重新迭代,数量大且多的话,花费的时间会比较多。

#include<iostream>
using namespace std;
int main()
{
    int n, i;
    int f[55] = { 0,1,2,3 };  //f[0]=0,f[1]=1,f[2]=2,f[3]=3
    for (i = 4; i < 55; i++)
        f[i] = f[i - 1] + f[i - 3];
    while (cin >> n && n != 0)  //输入 n 的值,且 n 不等于0,则进入,否则退出
    {
        cout << f[n] << endl;
    }
    return 0;
}


 

0.0分

319 人评分

  评论区

#include<stdio.h>
int Cowsnumber(int n);
int main()
{ int n;
  do
  {
     scanf("%d",&n);
     printf("%d\n",Cowsnumber(n));


  }while(n!=0);

  return 0;

}
int Cowsnumber(int n)
{
    if (n<=4)
    {
      return n;
    }    //第一头小牛未满四年
    else
    {
      return Cowsnumber(n-1)*2-(Cowsnumber(n-1)-Cowsnumber(n-3));
    }


}
2024-09-05 13:18:58
#include<iostream>
using namespace std;
int main()
{
    int n;
    int f[55]={0,1,2,3};
    while(cin>>n && n!=0){
        for(int i=4; i<=n; i++){
            f[i] = f[i-1] + f[i-3];
        }
        cout<<f[n]<<endl;
    }
    return 0;
}
2024-08-05 18:56:59
#include<iostream>   
#include<vector>
#define MATUREAGE 4
using namespace std;
int main()
{
	int year=0, cowNum=0;
	cin >> year;
	vector<int>age;	
	cowNum = 1;
	age.push_back(MATUREAGE);	
		for (int i = 2; i <= year; i++)
		{
			int numplus = 0;
			for (int j = 0; j < cowNum; j++)
			{
				age[j] += 1;
				if (age[j] >= MATUREAGE)
				{
					numplus++;
				}
			}
			cowNum += numplus;
			for (int k = 0; k < numplus; k++)
			{
				age.push_back(1);
			}
		}
		cout << cowNum << endl;
	return 0;
}请问大佬们这个代码行吗
2024-04-28 20:02:23
我推出一个公式可以算出来哪年有多少个,为什么代码不对?第n年有{4+(n-1)(n-4)/2}头(n>4)
代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
    int n;
    while(n)
    cin>>n;
    if(n<=4){
        cout<<n<<endl;
    }
    else
    cout<<4+(n-1)(n-4)/2<<endl;
    return 0;
}
2024-01-20 22:15:58
#include<iostream>
using namespace std;
int a(int i);
int main()
{
    int b[255];
    int i,j=0;
    for( i=0;i<255;i++)
    {
        cin>>b[i];
        if(b[i]==0)
            break;
    }
    for( j=0;j<i;j++)
    {
        cout<<a(b[j])<<endl;
    }
 
    
}
 
int a(int i)
{
    if(i>1)
    {
        return ((i+1)/3)+a(i-1);
    }
    if(i==1)
    {
        return 1;
    }
}
C++的代码,但是评分是一个对一个错,这个错的是哪有错
2023-09-26 17:14:44
请教一下,我写的错在哪了
#include<iostream>
using namespace std;
int f(int n){
        if (n<4){
            return n;
        }else if(n=0){
            return 0;
        }{
            return f(n-1)+f(n-3);
        }
}

int main()
{
    int n,a,b,c;
    cout <<"请输入"<<endl;
    cin >> n ;
    cin >> a ;
    cin >> b ;
    cin >> c ;
    //  cout << f(n) << '\040' << f(a) << '\040'  << f(b) <<endl;
    cout << f(n) <<endl;
    cout << f(a) <<endl;
    cout << f(b) <<endl;
    cout << f(c) <<endl;
    return 0;
    }
2023-06-27 11:01:18
大佬们,这里的f[55]是数组,所以后面{}里的元素个数不应该和[]里的数组长度一样吗?可这里为什么{}只有四个元素(纯小白,望讲解)
2023-02-12 22:14:17
很详细,不错不错不错不错不错
2022-05-05 20:54:24