C++猴子选大王问题,如何不用数组做,即猴子数不受数组大小的限制,根据输入分配空间,总数少的时候节省空

.#include<iostream.h>intchoose(intnum,intdel){inti;inta[100];for(i=0;i<num;i++)a[i]=1... .#include<iostream.h>
int choose(int num,int del)
{
int i;
int a[100];
for(i=0;i<num;i++)
a[i]=1; //猴子状态初始化,为1表示可能被选上,为0表明没希望了;

int sum=0, //循环记数;
countOne=num; //累积记数初始化,大于1表明还有大王候选人;

while(countOne>1)
{
countOne=0;
for(i=0;i<num;i++)
{
sum+=a[i];
if(sum==del)
sum=a[i]=0; //淘汰倒霉猴子;
countOne+=a[i];
}
}

for(i=0;i<num;i++)
if(a[i]!=0)
return i; //找到幸运猴子编号(从0开始的);
}

void main()
{
int num,del;
cout<<"请输入猴子总数和淘汰数:";
cin>>num>>del;
cout<<"第"<<choose(num,del)+1<<"个猴子为王!"<<endl;
}
展开
 我来答
470080245
2011-04-04 · TA获得超过202个赞
知道小有建树答主
回答量:456
采纳率:0%
帮助的人:330万
展开全部
用链表做或者动态分配数组,这样就可以猴子数不受数组大小的限制
或者直接网上搜索,应该很多人做过的。
这个问题类似Josephus循环问题。所以你可以参考一下Josephus循环问题的解法。有C代码和C++实现的,原理都差不多
用数组做的话,在开始时加一个变量,用于指定数组大小
int size = 0;
cin>>size;
int *array;
array = new int [size];
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hpfrog
2011-04-04 · TA获得超过358个赞
知道小有建树答主
回答量:185
采纳率:0%
帮助的人:218万
展开全部
给你个想法,供参考
choose中
int *a;
a=new int[num];
最后记住delete;
其它应该不用变
追问
这个方法好,能说的详细点吗,再加分
追答
int choose(int num,int del) 
{
int i;
int *a;
a = new int[num];
for(i=0;i1)
{
countOne=0;
for(i=0;i<num;i++)
{
sum+=a[i];
if(sum==del)
sum=a[i]=0; //淘汰倒霉猴子;
countOne+=a[i];
}
}

for(i=0;i<num;i++)
if(a[i]!=0){
delete []a;
return i; //找到幸运猴子编号(从0开始的);
}
delete []a;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
骛分之一
2011-04-05
知道答主
回答量:24
采纳率:0%
帮助的人:11.3万
展开全部
用动态分配与存储,它返回的是一个指针,这个指针就相当于数组名,你把它换一下就行了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
try4148
2011-04-04 · TA获得超过334个赞
知道小有建树答主
回答量:632
采纳率:100%
帮助的人:392万
展开全部
用链表做
追问
具体点,帮忙改一下程序,麻烦了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式