社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
题目描述:
有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?
输入:
输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<55),n的含义如题目中描述。
n=0表示输入数据的结束,不做处理。
输出:
对于每个测试实例,输出在第n年的时候母牛的数量。
每个输出占一行。
样例输入:
2
4
5
0
样例输出:
2
4
6
int main()
{
int age[10000]={0,4}; //数组中每个不为0的数,都是一头牛,数值表示年龄
int year[55]={1,1}; //year[4]表示第四年牛的数量
int y;
int s=1; //牛的数量,过度数值
for(y=1;y<=54;y++) //经过54个循环,分别计算54年的牛数
{
for(int n=1;age[n]!=0;n++) //每一年遍历一次age数组
{
if(age[n]<4){ //如果牛的年龄小于4,年龄+1
age[n]++;
}
else{ //如果牛的年龄等于4,数组中产生新的牛,新牛年龄为1
age[++s]=1;
}
}
year[y+1]=s; //遍历一次后将牛的数目赋值给year数组
}
for(int n=1;n<=54;n++)
{
cout<<n<<" "<<year[n]<<endl;
}
return 0;
}
这是我想到的第一个解决方案,但是存在问题:
int数组的长度受到限制,每多一头牛,数组中就要多一个数,数组长度不是无限的。
int main()
{
int a=0,b=0,c=0,d=1,s; //按年龄给牛分abcd类,a是1岁,b是2岁,c是3岁,d是四岁,s是sum
int a1,b1,c1,d1; //中间计算使用的数值
int x[55]={1,0}; //数组x存储牛的数量,x[3]表示第三年牛的数量
for(int n=1;n<=55;n++) //55次循环,计算每年的牛数,并存储在数组x中
{
a1=c+d;b1=a;c1=b;d1=d+c; //一岁的牛等于前一年三岁和四岁的牛的数量和,二岁的牛等于去年一岁的牛的数量
a=a1;b=b1;c=c1;d=d1;
s=a+b+c+d; //求和
x[n+1]=s; //存储
//cout<<s<<endl;;
}
int y[55],i=0; //后面的代码用于输入和输出
while(1)
{
cin>>y[i];
if(y[i]==0)break;
i++;
}
//cout<<"changshi"<<endl;
//cout<<"i="<<i<<endl;
for(int n=0;n<i;n++)
{
cout<<x[y[n]]<<endl;
}
}
通过这个方法,即完成了要求,又不会超过数组限制
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!