maikeis


私信TA

用户名:123456kkl

访问量:568

签 名:

等  级
排  名 3935
经  验 1727
参赛次数 0
文章发表 4
年  龄 0
在职情况 学生
学  校 江西软件职业技术大学
专  业

  自我简介:

TA的其他文章

题解-链表合并
浏览:95

解题思路:这是著名的约瑟夫杀人问题,有n个人,报数为3的人将会被杀死并从被杀死的人的下一个人重新开始报数,最后只留下一个人。

              所以我们可以定义一个数组,为了方便,可以将a[0]赋值为n;

              将已经杀死的人赋值为0,最后遍历数组筛选不为0的数,这个数就是最后一个人的序号。

注意事项:

参考代码:

#include<stdio.h>

#define N 100

int main()

{

int a[N]={0},m=0,k=0;//m表示已经被杀死的人的个数 ,k用来记录报数顺序 

int n;

scanf("%d",&n);

a[0]=n;

for(int i=1;i<n;i++)

{

a[i]=i;

}

for(int i=1;m<n-1;i++)//要杀n-1个人 

{

if(a[i%n]==0)//序号等于0时,说明已被杀死 

{

continue;

}

k++;

if(k==3)

{

a[i%n]=0;// 将被杀死的人的序号赋值为0

m++;

k=0; 

}

}

for(int i=0;i<n;i++)

{

if(a[i]!=0)

{

printf("%d",a[i]);

    } 

}

return 0;

 } 


 

0.0分

1 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答

代码解释器

  评论区