
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;
} 展开
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;
} 展开
展开全部
用链表做或者动态分配数组,这样就可以猴子数不受数组大小的限制
或者直接网上搜索,应该很多人做过的。
这个问题类似Josephus循环问题。所以你可以参考一下Josephus循环问题的解法。有C代码和C++实现的,原理都差不多
用数组做的话,在开始时加一个变量,用于指定数组大小
int size = 0;
cin>>size;
int *array;
array = new int [size];
或者直接网上搜索,应该很多人做过的。
这个问题类似Josephus循环问题。所以你可以参考一下Josephus循环问题的解法。有C代码和C++实现的,原理都差不多
用数组做的话,在开始时加一个变量,用于指定数组大小
int size = 0;
cin>>size;
int *array;
array = new int [size];
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
给你个想法,供参考
choose中
int *a;
a=new int[num];
最后记住delete;
其它应该不用变
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;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用动态分配与存储,它返回的是一个指针,这个指针就相当于数组名,你把它换一下就行了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用链表做
追问
具体点,帮忙改一下程序,麻烦了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询