社区
C语言
帖子详情
钱能的练习4-10怎么也不会做。
luckyum
2003-11-02 10:13:59
一头小母牛到第四年才开始每年生一头小母牛,这样n年有几头母牛。
谁帮我算算,最好有注解。
...全文
51
8
打赏
收藏
钱能的练习4-10怎么也不会做。
一头小母牛到第四年才开始每年生一头小母牛,这样n年有几头母牛。 谁帮我算算,最好有注解。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
luckyum
2003-11-03
打赏
举报
回复
好了,这么多。等我看完就结贴。
孩皮妞野
2003-11-03
打赏
举报
回复
看错题了。是每年生一头小母牛而不是每4年生一头小母牛。
上面的玩具程序改一句就可以了
void cow::grow()
{
if(++age>=4) // 改这句
community.push_back(cow());
}
但是说它是玩具,就是说这样是没有效率的。下面是一个O(n)的算法
#include <iostream>
// 注意,没有处理数据过大时溢出的问题
unsigned find(unsigned n)
{
// count[0-3] 是0-3岁的牛数
// count[4] 是4岁及以上的牛数
unsigned count[5]={1,0};
for(unsigned i=0; i<n; ++i){
// 一年后发生什么事?
// 1. 小牛长一岁,表现在代码上就是
// count[5]+=count[4]
// count[4]=count[3]
// count[3]=count[2]
// count[2] = count[1];
// count[1] = count[0];
// 2. 性成熟的母牛产仔, 数目等于当前的count[5]
count[4] += count[3]; // 3岁母牛加入生育大军
for(unsigned j=3,k=2; j>0; --j,--k)
count[j] = count[k]; // 各长1岁
count[0] = count[4]; // 新生儿
}
// 汇总输出
unsigned sum=0;
for(unsigned i=0; i<5; ++i)
sum += count[i];
return sum;
}
main()
{
unsigned n=1;
do{
std::cout<<"enter years[n], 0 to exit:"<<std::endl;
std::cin>>n;
std::cout<<n<<" years later, there will be "<<find(n)<<" cows"<<std::endl;
}while(n);
}
ding198116
2003-11-03
打赏
举报
回复
迭代比较好,能让人理解!!
bambooshan
2003-11-03
打赏
举报
回复
不是吧,我看最好的办法应该是用“递归”法!
孩皮妞野
2003-11-02
打赏
举报
回复
这有一个玩具,n别太大。
#include<vector>
#include <iostream>
struct cow
{
unsigned age;
public:
cow():age(0){}
cow(const cow& c):age(c.age){}
void grow(); // 长一岁
public:
static std::vector<cow>& community;
};
std::vector<cow> c;
std::vector<cow>& cow::community=c;
void cow::grow()
{
if(++age%4==0)
community.push_back(cow());
}
void find(unsigned n)
{
c.push_back(cow());
for(unsigned i=0; i<n; ++i){
unsigned s = c.size();
for(unsigned j=0; j<s; ++j)
c[j].grow();
}
std::cout<<n<<" years later, you will have "<<c.size()<<" cows."<<std::endl;
}
//---------------------------------------------------------------------------
int main(int argc, char* argv[])
{
unsigned n;
std::cout<<"Enter years(n):"<<std::endl;
std::cin>>n;
find(n);
return 0;
}
//---------------------------------------------------------------------------
zhaochong12
2003-11-02
打赏
举报
回复
-_-#...甘拜下风!!!!
ALNG(?)的算法何止好我千倍!
....得了~
接分快乐!^_^~
谢谢!ALNG , 学到了!
zhaochong12
2003-11-02
打赏
举报
回复
#include <iostream>
using namespace std;
main()
{
int cattle=0,num=n/4; //变幻一下,1变一牛
for(int iFor=0;iFor<num;iFor++) //第一只牛生小牛,四年一个~
for(int tFor=iFor+2;tFor<num;tFor++) //小牛生小牛,4年一个~
for(int threeFor=tFor+tFor;threeFor<num;threeFor++)
//以后每次的乖乖小牛
cattle++; //可爱的小牛多一头
}
大概就是这样了~时间有点紧~楼主没有解决的话留言~
孩皮妞野
2003-11-02
打赏
举报
回复
年份 有生育能力牛数 新生牛数 总数
0 0 1 1
4 1 1 2
8 2 2 4
12 4 4 8
...
所以
Niu(N) = 2^(n/4)
#include <iostream>
main()
{
unsigned n;
std::cout<<"enter n:"<<std::endl;
std::cin>>n;
n/=4;
if(n<32)
std::cout<<(1<<n)<<std::endl;
else
std::cout<<"fuck, too many years. ask god!"<<std::endl;
}
c++
钱能
练习
2代码
C++
钱能
的部分代码,不是很全,请见谅。
钱能
C++课后
练习
答案(第二版)
钱能
C++课后
练习
答案,第一部分的。多种解法。主要是看到有人传答案未包括第一部分,就补充下
钱能
\
钱能
c++习题答案
钱能
\
钱能
c++习题答案
钱能
\
钱能
c++习题答案.doc
钱能
C++教材课后习题答案
是一份十分详细的C++程序集,完整注释,值得学习
c++程序设计教程-
钱能
书后习题源码
c++程序设计教程-
钱能
书后习题源码
C语言
69,368
社区成员
243,081
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章