以下编程题目用C语言实现,只有写对一题,就可得100分。

以下编程题目用C语言实现,只有写对一题,就可得100分。,第1张

偶回答第二题,其实这个题 很EASY 是初学的题目啊

#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 张三

}


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

原文地址: https://outofmemory.cn/yw/11685638.html

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

发表评论

登录后才能评论

评论列表(0条)

保存