六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 30|回复: 0

grids 2746 约瑟夫问题

[复制链接]

升级  1.33%

14

主题

14

主题

14

主题

秀才

Rank: 2

积分
52
 楼主| 发表于 2013-1-26 12:33:09 | 显示全部楼层 |阅读模式
题意

中文不解释
思路

这个一道模拟题,要按照题意的步骤执行就可以得出结果,基本步骤为

(1)数数
(2)所数的数从列表中取出
(3)判断是否为1,是则输出,不是则继续
总结

暂无
代码

(I)方法一:使用数组+前移






(1)C




#include "stdio.h"//#include "stdlib.h"#define max 300int a[max+2];int main(){ int n,m; int i,j; while(scanf("%d%d",&n,&m) != EOF && !(n==0 && m==0)) {        for(i=0;i<n;i++) a=i+1;        i=0;        while(n!=1)        {            i=(i+m-1)%n;            for(j=i+1;j<n;j++){a[j-1]=a[j];}            n--;        }        printf("%d\n",a[0]);    }    //system("pause");    return 0;}

(2)C++




#include "iostream"//#include "cstdlib"using namespace std;const int MAX = 300;int a[MAX+2];int main(){    int n,m; while((cin>>n>>m) && !(n==0 && m==0)) {        int i;        for(i=0;i<n;i++) a=i+1;        i=0;        while(n!=1)        {            i=(i+m-1)%n;            for(int j=i+1;j<n;j++){a[j-1]=a[j];}            n--;        }        cout<<a[0]<<endl;    }    //system("pause");    return 0;}
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表