ghost79

导航

<2009年4月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

统计

留言簿(0)

随笔分类

随笔档案

文章档案

搜索

最新评论

阅读排行榜

评论排行榜

约瑟夫问题的数组实现

[问题描述]

有N个人,其编号分别为1-N。这N个人按顺序排成一个圈。现在给定一个正整数M,从第一个人开始依次报数,数到M的人出列,然后又从下一个人开始又从1开始依次报数,数到M的人又出列...如此循环,直到最后一个人出列为止。 
 
[输入] 

输入只有一行,包括2个整数N,M。之间用一个空格分开。

[输出] 

输出只有一行,包括N个整数。

[示例] 

输入:
8 5

输出:
5 2 8 7 1 4 6 3

[问题解答]

#include <iostream>

using namespace std;

int main( void )
{
    
int n, m;
    cin 
>> n >> m;

    
int *= new int[ n ];
    
forint i = 0; i < n; i++ ) p[ i ] = i + 1;
    
    
int outPos = 0;
    
forint totalPerson = n; totalPerson > 0; totalPerson-- )
    
{
        outPos 
= ( outPos +  m - 1 ) % totalPerson ;
        cout 
<< p[ outPos ] << " ";
        
        
forint j = outPos; j < totalPerson; j++ ) p[ j ] = p[ j + 1 ];
    }

    
    delete []p;
    system( 
"PAUSE" );
    
return 0;
}

posted on 2009-04-09 13:18 C家家 阅读(191) 评论(1)  编辑 收藏

评论

标题  
姓名  
主页
内容   
请输入验证码:
*
  登录  使用高级评论  Top 订阅回复  取消订阅
[使用Ctrl+Enter键可以直接提交]