算法...
1 2 3 4 5............m (m 个)
按照1-m的顺序围一个圆圈,从第一个开始数,每数到第n 个,
就要去掉这个数,这样一直下去 ,直到只有最后 (n〈m)
要求:
输入数据: 输入m n m 和n 为整数。
输出形式: 输出猴最后剩的那个几个数 建立一个函数来实现此功能。.....
问题点数:80、回复次数:5Top
1 楼MagicCarmack(MagiC++)回复于 2005-04-14 20:16:55 得分 0
这是不就是那个数据结构书上的问题!
建议楼主看书Top
2 楼chenyec(想飞)回复于 2005-04-14 20:19:16 得分 0
晕~
void fun ( const int m, const int n )
{
int s = 0;
while ( n > 0 )
{
for ( int i = s; i <= m; i++ )
s = i%n;
cout << a[s];
for ( int j = s; j < n-1; j++ )
a[j] = a[j+1];
n--;
}
}Top
3 楼jp1984(mathfrog)回复于 2005-04-14 21:43:11 得分 0
模拟即可。
Top
4 楼wlwlwl(公公)回复于 2005-04-15 08:33:51 得分 0
栈的应用Top
5 楼PPc_Pc(嘿嘿)回复于 2005-04-15 13:07:08 得分 80
#include <iostream.h>
void main()
{
//建立猴子数组
const int num=10; //猴子数
int interval; //每次数interval个猴子,便让该猴子离开
int a[num]; //猴子数组
//给猴子编号
for(int i=0; i<num; i++) //猴子的编号只与猴子数有关
a[i]=i+1;
//输入数猴子间隔
cout <<"please input the interval: "; //输入一个数猴子个数
cin >>interval;
//将全体参加的猴子输出
for(int i=0; i<num; i++) //顺序输出开始时的猴子编号
cout <<a[i] <<",";
cout <<endl;
int k=1; //标识处理第k个离开的猴子
int i=-1; //数组下标(下一个值0就是第一个猴子的下标)
//处理获胜前的猴子
while(1){
//在圈中数interval个猴子
for(int j=0; j<interval; ){
i=(i+1)%num; //对下标加1求模
if(a[i]!=0) //如果该元素的猴子在圈中,则承认数数有效
j++;
}
if(k==num) break; //该猴子是最后一个(胜利者)吗?
cout <<a[i] <<","; //输出离开的猴子之编号
a[i]=0; //标识该猴子已离开
k++; //准备处理下一个圈中猴子
}
// 语句跳转到此
cout <<"\nNo." <<a[i] <<" boy've won.\n"; //输出胜利者
}
Top




