#include<stdio.h>
#include<stdlib.h>
void main()
{
int a[100]/*用来放环里的每个人的,人口上限(好像在打魔兽争霸)100,当然可以再改大*/
int n,r,ctor,u/*n是用来循环赋值的,给r个人循环赋1~u,一共r个人,ctor计数器,到了u再重新归1*/
int call(int a[],int real,int u)/*报数函数*/
for(n=0n<=99n++)a[n]=0/*给所有元素赋值为0,这样以后没赋值1~u的就都为0,可以当作不存在*/
printf("/约瑟夫环 JOSEPHUS/\n\n")
printf("输入参与报数的人数\n")
scanf("%d",&r)
printf("输入报数上限\n")
scanf("%d",&u)
ctor=1
for(n=0n<rn++) /*这个循环里给输入的人数都赋值,从1到u,相当于报的数*/
{
*(a+n)=ctor
ctor++
if(ctor>u)ctor=1
}
call(a,r,u)system("pause")/*调用点名函数*/
}
int call(int a[],int real,int u)
{
int n1,i
int *p
p=(a+u-1)
n1=0i=u
for(n1<real-1p++)
{
if(p>(a+real-1))p=a/*如果点名点过了,就接着队伍没有出列的第一个人继续*/
if(*(p)!=0) /*如果扫描的数字不为零,说明这个人还在队列中,那么看下面*/
{
if(i>u)i=1/*由于是剩下的人继续报数,所以当报到u这个上限时,还是要从新归1*/
if(i==u) /*当到达上限,说明这个人该出列啦,它的位置就填充为0*/
{
*(p)=0n1++/*n1计算着一共多少人出列,通过n1<real-1,可以留下最后一个人,这是最终目的*/
}
i++
}
}
for(i=0i<reali++) /*从新扫描数组,发现不是0的就输出,到这时候肯定只剩一个数不是0了*/
if(*(a+i)!=0)printf("所剩最后一位原来的呼号是%d\n\n",i+1)
}
所谓命名空间就是指由程序设计者命名的内存区域。你要想搞懂为什么要使用命名空间就得必须知道它的作用。
命名空间的出现就是为了解决同名实体。
比如在学校里难免会出现同名同姓的学生,如果你是校长会怎样做?为了不发生老师点名的冲突,肯定会把同名同姓的学生分别安排在不同的班里。
比如一所学校有3个张三同学,你会把他们分别放在1班,2班,3班。这样一来老师再点名,就不会出现冲突了,比如老师在1班占名叫张三,肯定只有1个人点答。而这些班就是命名空间了。
比如
namespace n1 // 1班
{
char 张三
}
namespace n2 // 2班
{
char 张三
}
namespace n3 // 3班
{
char 张三
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)