| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1030 人关注过本帖, 1 人收藏
标题:选太子问题
只看楼主 加入收藏
tangjingwei
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2009-11-6
收藏(1)
 问题点数:0 回复次数:7 
选太子问题
某皇帝有2m个儿子,现在要从中选出一个做太子,皇帝不知道该把那一个皇子立为太子,于是决定用下面的方法来选出太子,设每个太子的编号分别1、2、3、…、2m,按顺时针方向站成一个圆圈,现在从1号太子开始按顺时针方向数,数到第n个人,把他淘汰出局,然后从他的下一个人开始上述过程,当第m个人被淘汰时,转变方向继续从1开始数,重复上述过程,最后剩下的皇子将被立为太子。现在请你写一个程序,计算出几号皇子将被立为太子。
输入两个正整数m n
输出太子的编号

注意是先顺着数,再逆着数,然后再顺着,再逆着,。。。直到结束。

我脑袋晕了,求高手指教

搜索更多相关主题的帖子: 太子 
2010-11-08 22:23
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
选妃子还说的过去,

我就是真命天子,顺我者生,逆我者死!
2010-11-08 22:25
tangjingwei
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2009-11-6
收藏
得分:0 
回复 2楼 BlueGuy
呵呵,其实也就是约瑟夫问题
2010-11-08 22:28
五当家
Rank: 12Rank: 12Rank: 12
等 级:火箭侠
威 望:2
帖 子:1112
专家分:3674
注 册:2010-10-20
收藏
得分:0 
也差不多啦!

经验积累中............
2010-11-08 22:31
fy8207345
Rank: 2
等 级:论坛游民
帖 子:37
专家分:64
注 册:2010-10-12
收藏
得分:0 
用图形函数试试
2010-11-08 22:31
vandychan
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
等 级:贵宾
威 望:18
帖 子:2296
专家分:6418
注 册:2010-8-20
收藏
得分:0 
真正的太子 其实压根不在宫中

到底是“出来混迟早要还”还是“杀人放火金腰带”?
2010-11-08 22:35
思恋到心碎
Rank: 2
等 级:论坛游民
帖 子:13
专家分:27
注 册:2010-10-22
收藏
得分:0 
可以用循环队列吧,数组中的值表示太子状态0淘汰,1保留进入下次循环
2010-11-08 22:46
浩凡儿
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:101
专家分:394
注 册:2010-10-30
收藏
得分:0 
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int M,N;
    printf("请输入王子人数与要数到的数:\n");
   scanf("%d%d",&M,&N)
    int man[N]={0};
    int count=1;
    int i=0,pos=-1;
    int alive=0;
    while(count<=N)
    {
        do{
            pos=(pos+1) % N;  //环状处理
            if(man[pos]==0)
                i++;
            if(i==M) //数数为M的王子
            {
                i=0;
                break;
            }
        }while(1);
        man[pos]=count;
        count++;
    }
    printf("\n约瑟夫排列(最初位置-约瑟夫环位置):\n");
    for(i=0;i<N;i++)
    {
        printf("%d-%d  ",i+1,man[i]);
        if(i!=0 && i%10==0) //每输出10个则换行
            printf("\n");
    }
    printf("\n\n准备剩下的人数?");
    scanf("%d", &alive);
    printf("这%d人初始位置应排在以下序号:\n",alive);
    alive=N-alive;
    for(i=0;i<N;i++)
        if(man[i]>alive)
            printf("初始序号:%d,约瑟夫环序号:%d\n",i+1,man[i]);
    printf("\n");
    getch();
    return 0;
}
2010-11-08 23:06
快速回复:选太子问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.063133 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved