报数离队问题 c++

报数离队问题 c++,第1张

#include <stdio.h>

int main(void)

{

bool isInGroup[20]

int i

for (i = 0 i 档岩漏< 20 i++)

isInGroup[i] = true

int personNumberInGroup = 20

int pos = -1

while (personNumberInGroup != 0)

{

for (i = 0 i <枣郑 3 行烂++i)

{

pos = (pos+1)%20

if (isInGroup[pos] == false)

i--

}

printf("%d ", pos)

isInGroup[pos] = false

personNumberInGroup--

}

return 0

}

约瑟夫环问题:

length个人围成一圈,分别编号1到length,谈蔽闷含弯从1开始报数报到seg的出去,继续报,问最后剩下的是原来的几号?

#include "stdio.h"

#define MAX 20

/*length个人围成一圈,报到seg退出,返回最后留下人的序号(>=1)*/

int JohnsonRing(int length, int seg){

int arr[MAX]

int i, k, n

/*设置每一个人的出局标志:0在列,1退出*/

for(i=0i<lengthi++){

arr[i] = 0

}

i = 0

k = 1

n = length

while(n >1) {

if(arr[i] == 1){/*当前位置并册的人已退出,移到下一位置 */

i = (i + 1) % length

continue

}

if(k == seg){/*当前位置的人退出*/

arr[i] = 1

n--

printf("%d\n", i+1)

i = (i + 1) % length

k = 1

}

else{/*继续报数*/

k++

i = (i + 1) % length

}

}

for(i=0i<length &&arr[i]==1i++)

return i+1

}

void main()

{

int remain

printf("sequence :\n")

remain = JohnsonRing(10, 7)

printf("remain : %d\n", remain)

}

#include <stdio.h>

void main()

{

int i,k,m,n,num[50],*p

printf("请输入人数数量:")

scanf("%d",&n)

p=num

for(i=0i<ni++)

*(p+i)=i+1//以1至17为序给每个人编号

i=0 //i为每次循环时的计袭拍数变量

k=0 //k为按1,2,3报数时的计数变量

m=0 //m为退出人数

while(m<n-1)//当循环体人数比源瞎n-1少时(即未退出人数大于1时)执行循环体

{

if(*(p+i)!=0)

k++

if(k==3)//对退出的人的编号置0

{

*(p+i)=0

k=0

m++

}

i++

if(i==n)//报数到尾后,i恢复0

i=0

}

while(*p==0)

p++

printf("最后留下来的雹禅空第%d个人\n",*p)

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12426594.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存