/*
* 作者:刘克雄(转载请说明出处:http://liukexiong.iteye.com/)
* n个人围成一圈,1,2,3循环报数,报到3的人退出.到最后只余1人,输出最后留下的是第几号
*/
#include<stdio.h>
#include<stdlib.h>
/*
* 用数组去模拟报数的过程
* n:数组中的元素个数
* given:报到几
*/
int remain(int *a,int n,int given)
{
//现在报到几
int count=0;
//数组中已经有多少位置1
int sum=0;
//自己来控制变量i,因为i最后还要回到头部
int i;
for(i=0;i<n;)
{
//程序退出条件
if(sum==n-1)break;
//已经报过数
if(*(a+i)==1)
{
//到达数组末尾
if(i==n-1)
{
i=0;
}
else
{
i++;
}
}
//没有报过数
else
{
count++;
//报到指定的数
if(count==given)
{
//报数恢复为0
count=0;
sum++;
//置该位置为已经报过数
*(a+i)=1;
}
//到达数组末尾
if(i==n-1)
{
i=0;
}
else
{
i++;
}
}
}
for(int j=0;j<n;j++)
{
if(*(a+j)==0)break;
}
return j+1;
}
int main()
{
int a[]={0,0,0,0,0,0};
int n=sizeof(a)/sizeof(a[0]);
int given=3;
int result=remain(a,n,given);
printf("最后留下的是第%d号\n",result);
return 0;
}
分享到:
相关推荐
分别用数组和链表实现的约瑟夫环问题,内有详细的介绍。
1模拟轮盘抽奖游戏2模拟报数游戏(约瑟夫环问题)用python实现
用数组方法解决约瑟夫问题 用数组方法解决约瑟夫问题
纯手写 java 数组模拟链表约瑟夫环问题 有很大更改空间 仅供参考
约瑟夫环问题的链表和数组两种解法 设有N个人围坐一圈并按顺时针方向从1到N编号,从第S个人开始进行1到M报数,报到第M个人时,此人出圈,再从他的下一个人重新开始1到M的报数,如此进行下去直到所有的人都出圈为止,...
约瑟夫环的数组解法
用数组实现约瑟夫出圈问题。 n个人排成一圈,从第一个人开始报数,从1开始报,报到m的人出圈,剩下的人继续开始从1报数,直到所有的人都出圈为止。对于给定的n,m,编写程序求出所有人的出圈顺序。
该程序用c++编写。约瑟夫问题可以用指针链表实现也可以用数组实现。这里提供一个用数组实现的,链表的可参考该算法实现
用数组实现约瑟夫环的数据结构 数组 约瑟夫环的问题
约瑟夫问题有多种解决方案 一种是数组方案 一种是链表方案 这种事数组,链表方案与数组方案哪个更优 需要读者去考虑
实战4.1:约瑟夫(Joseph)问题(数组实现).exe
分别用数组和链表实现约瑟夫环,经调试正确无误
数组实现约瑟夫环 数组实现约瑟夫环 数组实现约瑟夫环 数组实现约瑟夫环 数组实现约瑟夫环
POJ 1012 约瑟夫问题的数学解法及分析POJ 1012 约瑟夫问题的数学解法及分析POJ 1012 约瑟夫问题的数学解法及分析
约瑟夫问题面向对象解法报告书(C++版)pdf格式
java用数组实现的约瑟夫环问题。代码简单易懂。
此资源属于算法分析课程的实验(本程序的两种实现方法都使用了相同的界面来输出,所以单看界面是看不出其中的不同之处的,不同之处体现在dao包里面的源文件里)只供学习使用。本人很少上CSDN,有兴趣,有需要的话...
用数组解决约瑟夫问题的源程序 【约瑟夫问题】 编号为1,2,......,n的n个人按照顺时针方向围坐一圈。从第一个人开始顺时针方向自1开始报数,报到m时停止报数。报m 的人出列,从他在顺时针方向的下一个人开始重新...
已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。
(整数,正负均可),一开始任选一个正整数作为报数上限值m,从第一个人开 始顺时针(若密码为负,则逆时针)自一开始顺序报数,报到m时停止报数。 ...则逆时针)上的下一个...用c中的数组和链表方法可以求出出列的顺序。