//调试了一下,输入的年数最大为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;
}
#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
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
i--;
s1=q[i];}
for(i=3;i
s2=0;
for(i=0;i
sum=sum-(s1+s2);/*用假设一个也不死的和减去多生的再减去死了的*/
printf("the amount of cow is %ld ",sum);
}
}
可以发现其中数的规律,与Fibonacci数列一个道理。
/*随便写了一个,很久没写了,可能有语法错误*/
#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);
}
#include
#include
#include
void FunctionThree( int n )
{
using namespace std;
vector
vector
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;
}
原来只是还算比较简单的数学题
不过还确实是“牛”题
因为还都是母牛,叫 牛比题 也不为过