一道C编程问题(高手请进!!!)

有n个数按1,2,3,4,5,6...n排成一圈,从1开始按顺序将其标记为1,2..m,1,2..m,...n,(n>m)将标记为m的数取出不放回数列,后继续按1,2..... 有n个数按1,2,3,4,5,6...n排成一圈,从1开始按顺序将其标记为1,2..m,1,2..m,...n, (n>m)将标记为m的数取出不放回数列,后继续按1,2..m标记下去,直到全部取出为止.要求输入n,m的值,求m的输出数列.

eg:
输入:
13 2
10 3
5 1
6 3
输出
2 4 6 8 10 12 1 5 9 13 7 3 11
3 6 9 4 8 5 2 7 1
1 2 3 4 5
3 1 5 2 4
展开
 我来答
萌哒牛
2007-12-06 · TA获得超过1910个赞
知道小有建树答主
回答量:1100
采纳率:0%
帮助的人:131万
展开全部
#include <stdio.h>
#include <malloc.h>
#include <memory.h>
//pLeft长度固定为N, 表示队伍中留下人的位置.nLeave是离开的人数, 判断结束
//输出是依次从队伍中离开的人的序号.
int fun(unsigned char *pLeft, int N, int *nLeave, int m, int nStart)
{
int nCount=0,nPoint=nStart;
if(pLeft[nPoint]==1)
nCount++;
while(nCount<m)
{
nPoint=nPoint%N+1;
if(pLeft[nPoint]==1)
nCount++;
}
(*nLeave)++;
pLeft[nPoint]=0;
return nPoint;
}

void main(int argc, char *argv[])
{
int n=0,m=0,nLeave=0,nStart=1;
printf("输入 人数n,上限m.\n");
scanf("%d,%d",&n,&m);
unsigned char *pLeft=(unsigned char *)calloc(n+1,sizeof(char));
memset(pLeft,1,(n+1)*sizeof(char));
while(nLeave<n)
printf("%d\t",nStart=fun(pLeft, n, &nLeave, m, nStart));
free(pLeft);
}

---------输出,20个人,m=26------------
输入 人数n,上限m.
20,26
6 13 1 11 3 17 14 12 16 2
10 8 15 5 9 18 20 7 4 19
意法半导体(中国)投资有限公司
2023-06-12 广告
单片机编程是指使用单片机编程语言,如C语言,来编写单片机的程序代码,以控制单片机的行为。这种技术在电子工程、计算机科学和电子通信等领域中被广泛应用。单片机编程的主要任务是设计和实现单片机的程序,包括定义单片机的指令系统、编写程序代码、处理器... 点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式