C++编程题!(一道牛题!高手进!!)急,答对有追加分数!!!

有一头母牛,从第四年当年开始每一年生一头母牛(所有牛只生母牛),生下来的牛从出生第四年开始也每年“生且只生”一头母牛,依此类推。每头牛的寿命都是三十年(第三十一年死掉,生... 有一头母牛,从第四年当年开始每一年生一头母牛(所有牛只生母牛),生下来的牛从出生第四年开始也每年“生且只生”一头母牛,依此类推。每头牛的寿命都是三十年(第三十一年死掉,生不了了),问第N年有多少头牛?要求:用户输入年数,程序输出牛的数目。 展开
 我来答
二货pa
2007-12-14
知道答主
回答量:12
采纳率:0%
帮助的人:0
展开全部
//调试了一下,输入的年数最大为68,再大就越界了
//用递归做的,要容易理解一点

#include <iostream>
using namespace std;

long FunctionCow(int n);

void main()
{
int n;

cout << "有一头母牛,从第四年当年开始每一年生一头母牛(所有牛只生母牛)\n,"
<< "生下来的牛从出生第四年开始也每年“生且只生”一头母牛,依此类\n"
<< "推。每头牛的寿命都是三十年(第三十一年死掉,生不了了),问第N\n"
<< "年有多少头牛?\n\n"
<< "请输入年数N:";

cin >> n;

cout << "\n第" << n << "年有" << FunctionCow(n) << "头牛.\n";

system("pause");
}

// 返回一头牛从出生到n年间产生的牛的数量
long FunctionCow(int n)
{
static long count = 1;

if (n >= 4)
{
// 从第四年起每年产一头牛 count++
for (int i = 4; i<=n && i<=30; i++)
{
count++;
FunctionCow(n - i);
}

// 如果这的年数会超过30就减少一头牛 count--
if (n > 30)
count--;
}

return count;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yhy19820816
2007-12-07 · TA获得超过304个赞
知道小有建树答主
回答量:308
采纳率:0%
帮助的人:368万
展开全部
#include "stdio.h"
#define NMAX 100
void main()
{
long f[NMAX]={1,1,1},p[NMAX]={1,1,1},q[NMAX]={1,1,1};/*f记录每年共多少牛,p记录31年后每年多生了多少牛*/
long i,n,m,s1,s2,sum;
printf("input the year: ");
scanf("%d",&n);
for(i=3;i<n;i++)/*假设一个都不死*/
f[i]=f[i-3]+f[i-1];
i--;
sum=f[i];
if(n<=3)printf("the amount of cow is %ld",f[0]);
else if(n>3&&n<31)printf("the amount cow is %ld",sum);/*31年以下,一个也没有死*/
else/*31年及31年以上的情况*/
{
if(n>=31&&n<34)s1=q[0];/*这几年一共死了一头牛*/
else {for(i=3;i<n-31+1;i++);/*n年一共死了的*/
q[i]=q[i-3]+q[i-1];
i--;
s1=q[i];}
for(i=3;i<n-31+1;i++)/*每年多生的*/
p[i]=p[i-3]+p[i-1];
s2=0;
for(i=0;i<n-31+1;i++)
s2=s2+p[i];/*n年一共多生的*/
sum=sum-(s1+s2);/*用假设一个也不死的和减去多生的再减去死了的*/
printf("the amount of cow is %ld ",sum);
}
}
可以发现其中数的规律,与Fibonacci数列一个道理。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
aspwolf1470
2007-12-07 · TA获得超过2643个赞
知道小有建树答主
回答量:1287
采纳率:0%
帮助的人:1344万
展开全部
/*随便写了一个,很久没写了,可能有语法错误*/

#include "stdio.h"
#include "conio.h"

main()
{
int i = 0;/*年数*/
int n = 1;/*牛*/
int j = 0;/*当前年数*/
int k = 0;/*死牛导致的不该存在的牛*/

printf("How many years?\n");
scanf("%d",&i);/*取得年数*/

/*不死牛的情况*/
for(;i-j〉=4;j=j+4){
n = n * 2;
}

/*死牛的影响*/
for(j=i-31;j>=0;j=j-4){
if(k==o){
k = 1;
}
else{
k=k*2;
}
}

n = n-k;
printf("%d年后的牛:%d",i,n);
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fairhood
2007-12-07 · TA获得超过428个赞
知道小有建树答主
回答量:318
采纳率:0%
帮助的人:342万
展开全部
#include <iostream>
#include <stdio.h>
#include <vector>

void FunctionThree( int n )
{
using namespace std;
vector<int> iVecYears;
vector<int>::iterator it;
iVecYears.push_back(0);
int cnt=0, yearCnt=0;

for ( int i=1; i <=n; i++ )
{
cnt=0;
yearCnt = iVecYears.size();

for ( it=iVecYears.begin(); it!=iVecYears.end() && cnt<yearCnt; )
{
cnt++;
*it=*it+1;
if( *it > 30 )
{
it = iVecYears.erase( it );
continue;
}
else
{
if ( *it > 4 )
{
iVecYears.push_back( 0 );
it = iVecYears.begin();
it +=cnt;
continue;
}

}
++it;
}
}
printf( "第%d年, 有%d头牛", n, iVecYears.size() );
}

int main()
{
char ch;

using namespace std;

int n;
cout<<"请输入第n年(n-1年后):";
cin>>n;

FunctionThree( n );
printf( "\nPress any key to exit...");
scanf( "%c", &ch);

return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
laocui172
2007-12-07 · TA获得超过1754个赞
知道小有建树答主
回答量:1957
采纳率:0%
帮助的人:997万
展开全部
原来只是还算比较简单的数学题

不过还确实是“牛”题
因为还都是母牛,叫 牛比题 也不为过
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(8)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式