c语言出圈问题
首先理解题意设有n个人围坐一圈并按顺时针方向从1到n编号。从第s个人开始进行1到m的报数, 报数到第m个人, 此人出圈, 再从他的下一个人重新开始1到m的报数,如此进行下去直到所有的人都出圈为止。现要求按出圈次序,给出这n个人的顺序表p。木易版答案:void Josegh(void){ int i,j,s1,w;s1=s;for(i=1; i<=n; i++) p[i-1]=i;for(i=n; i>=2; i--) { s1=(s1+m-1)%i; if(s1==0) s1=i; w=p[s1-1]; for(j=s1; j<i; j++) p[j-1]=p[j]; p[i-1]=w; }}这里提出几个广泛流传的错误:本人在学习此题过程中发现,不管是网上还是书店的一些参考书中,对此题的讲解都有一些错误!本人在这里提出几个广泛流传的错误,希望大家指正!① 南开上机题或无忧上机题的题干错误!原题干:若第i个人报数后出圈,则将p[i]置于数组的倒数第i个位置上,而原来第i+1个至倒数第i个元素依次向前移动一个位置。举个例子:套用原题干:若第10个人报数后出圈,则将p[10]置于数组的倒数第10个位置上,而原来第11个至倒数第10个元素依次向前移动一个位置。上面这句话显然不对!而实际上是:原列队第10个人报数后出圈(即编号为10的人报数出圈),则将p[9]置于数组的倒数第1个位置上,而原来第11个至倒数第1个元素依次向前移动一个位置。或这么表述:第1个报数后出圈的人(因为编号为10的人是第1个报数出圈的),将p[9]置于数组的倒数第1个位置上,而原来第11个至倒数第1个元素依次向前移动一个位置。错误分析:编题的人没有搞清其实“出圈次序”“出圈人编号”“出圈人所对应的数组下标”是三个不同的概念!如:第一个出圈的人,出圈次序是1,下标是p[9],编号是10。而编题人简单地都用i表示了!显然不对!这里我认为本句话应该改为:第i个人报数出圈的人,将“此人的编号”置于数组的倒数第i个位置上。②市面上卖的谭浩强主编的《三级C语言上机指导》一书中(清华大学出版社2005年7月第1版封皮是红色的价格是22.00元)对此题的解释也有错误:讲解中说:s1=(s1+m-1)%i的作用是找出报数后出圈人的下标。本人认为编者也犯了类似的错误:应该改为:s1=(s1+m-1)%i的作用是找出报数后出圈人的“编号”。因为变量s1表示的不是出圈人的所对应的数组下标,而是其“编号”。清楚变量:变量i:表示没有出圈的人数。变量s1:表示出圈人所对应的编号。编号s1=p[s1-1]。变量w:暂存变量,用于暂时存放刚刚出圈人的编号。数组p[]:存放出圈人编号的数组。程序结束后,该数组按出圈次序倒序存放出圈人的编号。思路步骤:①建立数组,应注意:p[下标]=编号 ;下标=编号-1;编号s1=p[s1-1]。对应代码是:for(i=1; i<=n; i++) p[i-1]=i;②倒序循环for(i=n; i>=2; i--),找出出圈人的“编号”s1。对应的算法是通过求余得到的!s1=(s1+m-1)%i;③将刚出圈人的编号先寄存在暂存变量中。④将刚出圈的人之后至原队列最后一个未出圈的人依次在数组中前移一位。对应的代码是:for(j=s1; j<i; j++) p[j-1]=p[j];⑤将刚出圈人的编号放置在最后一个未出圈的人的后面,即p[i-1]的位置上。注意事项:①此题有两种变形,差别在于出圈人编号的存放顺序。考生应注意考题中是哪种变形!形式一:若第i个人报数后出圈,则将此人编号置于数组的倒数第i个位置上,而原来第i+1个至倒数第i个元素依次向前移动一个位置;即第1个出圈的编号存放在p[n-1]中,第2个出圈的编号存放在p[n-2]中,直至第n个出圈的编号存放在p[0]中。对应的void WriteDat(void) 函数中的循环语句是for(i=N-1; i>=0; i--)形式二:第1个出圈的编号存放在p[0]中,第2个出圈的编号存放在p[1]中,直至第n个出圈的编号存放在p[n-1]中。对应的void WriteDat(void) 函数中的循环语句是for(i = 0 ; i <= N - 1 ; i++)上面答案是形式一的答案。若遇到形式二,考生须在原有答案的基础上再增加两个循环以使循序颠倒过来!for(i=0,j=n-1;i<n,j>=0;i++,j--) /*也可改为for(i=0,j=n-1;i<n;i++,j--) */ q[j]=p[i]; for(i=0;i<n;i++) p[i]=q[i];②由于求余的作用,当报数人正好到最后一个人时s1为0,故要有if(s1==0) s1=i;③根据题意,开始时莫忘设置s1=s;
文章标签:
来自:出圈是什么意思
本文链接:https://www.u1e.cn/baike/a/d720e999150f54973382ce5e [复制]
猜你喜欢
给你的爱一直很安静,只剩下泪在我脸上任性,原来缘分是回来说明你突然不爱我这件事情。
寂寞是被原谅的罪,忘了是哪首歌里的句子,华丽的悲伤,至始至终爱与被爱都是伤害。
放弃了,就不应该后悔,失去了,就不该回忆。
夏天到了,我来到公园里玩,看见清清的湖水一波一波的荡漾着,鱼儿在湖水里游来游去。粉红的荷花张开了笑脸,碧绿碧绿的荷叶像大圆盘,远处有一孔石桥,石桥边有小山,小山上有一座凉亭,凉亭里的人们在快乐地喝茶。
我想要的未来,就是每天早上起床都能看见你和阳光都在。
生活辛苦,能找到一点阳光就快乐就好了;身体烦累,但是随时让自己心情舒畅,这是一个极好的能力,身累不致心累,生活还就是美好的。
有梦想的人睡不着,没梦想的人睡不醒。
Just because I don't want to be savage, it doesn't mean I have no temper.
最终你相信什么就能成为什么。因为世界上最可怕的二个词,一个叫执着,一个叫认真,认真的人改变自己,执着的人改变命运。只要在路上,就没有到不了的地方。
Teacher, engineer of human soul, who won't praise you!
心香三炷达苍冥,祈愿尘寰六合清。更愿佛光常注照,诸方好运享安宁!给您拜年了,祈愿您新年胜因善缘,吉祥安康!
寂寂闻猿愁,行行见云收。——李白《寻高凤石门山中元丹丘》
家声中垒也称贤,喜气临门敞绮筵,双璧联辉夸美眷,六葭应节缔良缘;女如五彩云犹丽,郎却斯文德自妍,恐负嘉招先作贺,诗题汤饼约明年。
不图虚名,不慕奢华。
不管发生什么,你都不要放弃,肯定会有意想不到的风景。也许不是你本来想走的路,可是另一条路有另一条路的风景,不要念念不忘原来的路,在这里你会遇到难忘的更好的风景。
在遥远的城市,陌生的地方,有他未曾见过的山和海。
俗话说:一百种人有一百种命运,有的人可以一条路一直走到底,有的人却注定要曲曲折折,不过谁也不需要羡慕谁。最重要的是:我们迟早会遇上。
人总要找点事情做,让自己忙起来,忙起来才知道生活不易,才明白平时的忧伤都是矫情。
等一阵风,等一阵雨,等一个唯一的你。
你们给我挺住,都别吃,都那么肥了怎么还有脸吃。
歇后语大全
竹筒里爬长虫(蛇)是什么意思?
砸子锅碗搬了灶是什么意思?
医院里的死人是什么意思?
一个世纪才盘点是什么意思?
夜里行船是什么意思?
熊瞎子耍棒子是什么意思?
小卒子过河是什么意思?
小尼姑看嫁妆是什么意思?
小耗子骂大街是什么意思?
戏子(旧时称职业的戏曲演员)搽脸蛋是什么意思?
膝盖上钉掌是什么意思?
西门庆请武大郎是什么意思?
武松看鸭子是什么意思?
脱下毡帽补烂鞋是什么意思?
铜钱眼里打秋千是什么意思?
瘫子不出门是什么意思?
孙猴子上了花果山是什么意思?
手帕做床单是什么意思?
拾到金娃找它妈是什么意思?
山顶上点灯是什么意思?
杀人越货的强盗是什么意思?
人把狗咬死了是什么意思?
秦桧杀岳飞是什么意思?
菩萨头上拉屎是什么意思?
女婿认不得丈人是什么意思?
泥鳅跳龙门是什么意思?
奈何不得冬瓜,只把茄子磨是什么意思?
蚂蚁抓上牛角尖是什么意思?
鲁班的锯子是什么意思?
马槽边上的苍蝇是什么意思?
癞蛤蟆跳到热鏊(是什么意思?
老虎追得猫上树是什么意思?
烂泥菩萨是什么意思?
烂泥里摇桩是什么意思?
看见岳父不搭腔是什么意思?
开水锅里煮空笼是什么意思?
久旱逢甘雨是什么意思?
画上的美人儿是什么意思?
猴子拉车是什么意思?
黄忠叫阵是什么意思?
黄鼠狼顶草帽是什么意思?
发臭的酸奶子是什么意思?
东西耳朵南北听是什么意思?
灯草吊颈是什么意思?
大路上长青草是什么意思?
初生的牛犊是什么意思?
虫蛀的扁担是什么意思?
彩虹和白云谈情是什么意思?
才学理发就碰上大胡子是什么意思?
爆米花沏茶是什么意思?
相关推荐
还没有人回应过