69,370
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
#include<math.h>
#include<conio.h>
int main()
{
int n,i = 0,count = 0,t = 0;
int *num;//每年出生的牛数
int *sum;//每年末的总数
int year[100] = {2,4,5,6,7};
/* do
{
scanf("%d",&year[i]);
if(year[i] ==0)
break;
if(i < year[i])
n = year[i];
}while(1); */
n = 5;//用来测试 的
num = (int*)calloc(n,sizeof(int));
sum = (int*)calloc(n,sizeof(int));
//num[0] = 0;
num[0] = 1;//0 此时即为母牛
//count += n;//母牛所生的牛 再加上自己
for(i = 1; i < n; i ++)
{
if(i > 3)
{
t = i -3;
while(t>=0)
{
num[i] += num[t--] ;
}
}
else
num[i] = 1;
}
//计算每年年末的奶牛数 从题意好像第N 年 算出的是第 N-1年末的数目 第n年 中 n-3(包含) 年之前出生的牛 都可以在这一年生出小牛
for(i = 1; i < n ; i ++)
{
t = i ;
if(t-3>0)
sum[i] = sum[t-3]*4 + num[i] +num[i-1] + num[i-2] ;
else
while(t >=0)
sum[i] += num[t --];
}
for(i = 0; year[i]; i ++)
printf("%d\n",sum[year[i]-1]);
getch();
return 0;
}
class cow
{
int FBirthYear; // 出生年份
public:
cow(int year) { FBirthYear = year; }
cow * Product(int year)
{
if( (year - FBirthYear) < 4 ) // 年龄小于4岁,不能生育
return NULL;
cow * daughter = new cow(year); // 在year年生个小母牛
return daughter;
}
}
int main()
{
int totalYear;
printf("please input year : \n"); // 提示输入总年数
scanf("%d", &totalYear);
std::vector<cow *> allCows;
cow * firstCow = new cow(-3); // 第一头母牛出生于4年前,即今年可生产
allCows.push_back(firstCow);
for(int year = 1; year <= totalYear; ++year)
{
for(std::vector<cow *>::iterator * it = allCows.begin(); it != allCows.end(); ++it)
{
cow * newCow = it->Product(year); // 看在第year
if(newCow)
allCows.push_back(newCow);
}
printf("Year: %d, Cow Number: %d", year, allCows.size());
}
return 0;
}
/*
有一头小母牛,在他长大的第4年后每一年都生一头小母牛,
它生的小母牛在长大的第4年后每年生一头小母牛,依次类推,
在N年时,母牛的总数是多少?
*/
#include<stdio.h>
int sum_cow(int );
int main()
{
int year;
int num;
printf("please input year : \n");
scanf("%d", &year);
num = sum_cow(year);
printf("num is %d \n", num);
return 0;
}
int sum_cow(int nyear)
{
int sum = 0;
//前四年牛的数量都与年数相等
if(nyear < 5)
{
return nyear;
}
else
{
//第N年的数量等于前一年原有的数量再加上今年生的小牛的数量
//今年生的小牛的数量等于今年能生的小牛的数量
//今年能生小牛的母牛的数量就是四年前母牛的数量
return sum_cow(nyear - 1) + sum_cow(nyear - 4);
}
}
// 算法:母牛的故事
// 刚生下的奶牛计为0岁,2岁过完,到3岁开始生小牛。
// 用4个元素的数组存放母牛的数量。第0,1,2三个元素存放0-2岁的奶牛数量,
// 第3个元素存放4岁及以上的奶牛(可生育)数量。循环指定的年数,
// 每年处理增加奶牛的年龄及刚出生奶牛的数量。
#include <stdio.h>
int main()
{
int nCow[4], i, nBorn, nYears[60] = { 1 };
for ( i = 1; i < 59 && nYears[ i - 1 ] != 0; ++i )
scanf( "%d", &nYears[i] ); // 批量输入
for ( i = 0; nYears[++i] != 0; )
{ // 批量计算每个输入的年数
nCow[0] = nCow[1] = nCow[2] = 0, nCow[3] = 1;
while ( nYears[i]-- > 1 )
{ // 循环指定的年数
nCow[3] += nCow[2]; // 将2岁过完的奶牛加入生育组
nBorn = nCow[3]; // 计算这一年生育的奶牛数
nCow[2] = nCow[1]; // 1岁组数量存入2岁组
nCow[1] = nCow[0]; // 0岁组数量存入1岁组
nCow[0] = nBorn; // 新出生的小牛
} // 下面打印输出
printf( "%d\n", nCow[0] + nCow[1] + nCow[2] + nCow[3] );
}
return 0;
}
// 算法:母牛的故事
// 刚生下的奶牛计为0岁,2岁过完,到3岁开始生小牛。
// 用4个元素的数组存放母牛的数量。第0,1,2三个元素存放0-2岁的奶牛数量,
// 第3个元素存放4岁及以上的奶牛(可生育)数量。循环指定的年数,
// 每年处理增加奶牛的年龄及刚出生奶牛的数量。
#include <stdio.h>
int main()
{
int nCow[4], i, nBorn, nYears[60] = { 1, };
for ( i = 0; i < 60 && nYears[ i - 1 ] != 0; ++i )
scanf( "%d", &nYears[i] ); // 批量输出
for ( i = 0; nYears[i] != 0; ++i )
{ // 批量计算每个输入的年数
for ( nCow[0] = nCow[1] = nCow[2] = 0, nCow[3] = 1;
nYears[i] > 1; --nYears[i] )
{ // 循环指定的年数
nCow[3] += nCow[2]; // 将2岁过完的奶牛加入生育组
nBorn = nCow[3]; // 计算这一年生育的奶牛数
nCow[2] = nCow[1]; // 1岁组数量存入2岁组
nCow[1] = nCow[0]; // 0岁组数量存入1岁组
nCow[0] = nBorn; // 新出生的小牛
} // 下面打印输出
printf( "%d\n", nCow[0] + nCow[1] + nCow[2] + nCow[3] );
}
return 0;
}
// 算法:母牛的故事
// 刚生下的奶牛计为0岁,2岁过完,到3岁开始生小牛。
// 用4个元素的数组存放母牛的数量。第0,1,2三个元素存放0-2岁的奶牛数量,
// 第3个元素存放4岁及以上的奶牛(可生育)数量。循环指定的年数,
// 每年处理增加奶牛的年龄及刚出生奶牛的数量。
#include <stdio.h>
int main()
{
int nCow[4], i, nBorn, nYears = 1;
while ( nYears != 0 )
{ // 输入年数
scanf( "%d", &nYears );
for ( nCow[0] = nCow[1] = nCow[2] = 0, nCow[3] = 1,
i = 1; i < nYears; ++i )
{ // 循环指定的年数
nCow[3] += nCow[2]; // 将2岁过完的奶牛加入生育组
nBorn = nCow[3]; // 计算这一年生育的奶牛数
nCow[2] = nCow[1]; // 1岁组数量存入2岁组
nCow[1] = nCow[0]; // 0岁组数量存入1岁组
nCow[0] = nBorn; // 新出生的小牛
}
if ( nYears ) // 打印输出
printf( "%d\n", nCow[0] + nCow[1] + nCow[2] + nCow[3] );
}
return 0;
}