C语言编程问题 请附上思想方法 和解题思路

FromAdmin★〖训练C-6〗约瑟夫问题描述DescriptionN个人(N不超过100的正整数)围成一圈,从第一个人开如报数,数到K的人出圈,再由下一个人开始报数,... From Admin
★〖训练C-6〗约瑟夫问题

描述 Description
N个人(N不超过100的正整数)围成一圈,从第一个人开如报数,数到K的人出圈,再由下一个人开始报数,数到K的人出圈,......依次输出出圈人的编号。

输入格式 Input Format
一行两个数据,即N和K(K < N)(中间用空格隔开)

输出格式 Output Format
依次出圈的人的序号(中间用空格隔开)

样例输入 Sample Input
8 6

样例输出 Sample Output
6 4 3 5 8 7 2 1
展开
 我来答
匿名用户
2012-02-14
展开全部
楼主你好,这个题目是道很经典的题目。参考思路可以是:定义一个数组,并分别赋值a[1]=1;a[2]=2.....然后设计一个for循环,假设用变量sum统计数值为非0的个数,当sum是k的倍数,输出a[i],让该a[i]=0,并统计出圈人数,+1;;如果i>n.则在循环末尾让i初始化为0.参考程序如下:
#include<stdio.h>
main ()
{
int N,K,i,a[1000],sum=0,b=0;//b是用来统计已出圈子的人数
scanf ("%d %d",&N,&K);
for (i=1;i<=N;i++)
a[i]=i;
for (i=1;b<N;i++)
{
if (a[i]!=0)
{
sum++;
if (sum%K==0)
{printf ("%d ",a[i]);a[i]=0;b++;}
}
if (i>=N) i=0;
}

}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式