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

2024-12-28 12:10:57
推荐回答(5个)
回答1:

//调试了一下,输入的年数最大为68,再大就越界了
//用递归做的,要容易理解一点

#include
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;
}

回答2:

#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;if[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 q[i]=q[i-3]+q[i-1];
i--;
s1=q[i];}
for(i=3;i p[i]=p[i-3]+p[i-1];
s2=0;
for(i=0;i s2=s2+p[i];/*n年一共多生的*/
sum=sum-(s1+s2);/*用假设一个也不死的和减去多生的再减去死了的*/
printf("the amount of cow is %ld ",sum);
}
}
可以发现其中数的规律,与Fibonacci数列一个道理。

回答3:

/*随便写了一个,很久没写了,可能有语法错误*/

#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);
}

回答4:

#include
#include
#include

void FunctionThree( int n )
{
using namespace std;
vector iVecYears;
vector::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 {
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;
}

回答5:

原来只是还算比较简单的数学题

不过还确实是“牛”题
因为还都是母牛,叫 牛比题 也不为过