第38套题:c语言出圈问题分析.doc

下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。

2.下载的文档,不会出现我们的网址水印。

3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。

文档包含非法信息?点此举报后获取现金奖励!

下载文档到电脑,查找使用更方便

15

积分

还剩页未读,继续阅读

关 键 词:C语言第38套

第38套试题

第38 套试题

资源描述:

第38套题:设有n个人围坐一圈并按顺时针方向从1到n编号,从第s个人开始进行1到m的报数,报数到第个m人,此人出圈,再从他的下一个人重新开始1到m的报数,如此进行下去直到所有的人都出圈为止。现要求按出圈次序,每10人一组,给出这n个人的顺序表。请考生编制函数Josegh()实现此功能并调用函数WriteDat()把结果p输出到文件OUT.DAT中。

设n=100,s=1,m=10.

思路:

(1)将1到n个人的序号存入一维数组p中;

(2)若第i(注意这里的i是指出圈的次序,如:第一个出圈的人,而不是序号为i的人出圈,也就是说第一个出圈的人放在倒数第一的位置上,第二个出圈的放在倒数第二个位置上,依此类推)个人报数后

出圈,则将p[i]置于数组的倒数第i个位置上,而原来第i+1个至倒数第i个元素依次向前移动一个位置;

(3)重复第(2)步直至圈中只剩下p[1]为止。

部分源程序已给出。

请勿改动主函数main()和输出数据函数writeDat()的内容。

-------------------

//重点,注意n个位置,每次出圈一个人,出去一个人就腾出一个位置,也就是说那个位置没用了,可以用来存放出圈的元素,而循环控制变量I(控制人的个数)每次减一,就相当于每次把圈的大小减一,踢出一个位置不用(实现是通过循环到人的个数时跳过最后几个存出圈元素的位置,进行下一次循环,而只不过被踢出圈的元素还在圈里,只不过到了那几个位置,就跳过,那几个位置由于没有用,所以可用来存放被踢出圈的元素)

注:题中第一个for()循环是先对数组p赋初值。在第二个for()中用i来控制没出圈的

总人数,s1=(s1+m-1)%i的作用是找出报数后出圈人的下标,其中对i求余的作用是使报

数按圈进行(即报到尾后又从头报),该算法在很多题目中都用到。由于求余的作用当

报数正好到最后一个时s1为0,故而要进行if(s1==0)的判断。内嵌的for()循环是将出圈

以后的人依次往前移。

解题思路:

题目中已经给出了算法过程,我们下面就看看怎么用代码实现:

(1)将1到n个人的序号存入一维数组p中;

这个我想大家应该都没有问题的了:很简单的一句循环赋值。

for(i=1;i<=n;i++)p[i-1]=i;

(2)若第i个人报数后出圈,则将p[i]置于数组的倒数第i个位置上,而原来第i+1个至倒数第i个元素依次向前移动一个位置;

(3)重复第(2)步直至圈中只剩下p[1]为止。

难点就在这后面两步,首先可以看出是要做一个循环,而且循环的条件是递减

马上可以先写出一个循环递减的框架

for(i=n;n>1;i--){}

接下来就是该怎么写循环体的内容了:我们可以发现,题目的算法过程2描述的很清楚,具体如下:

s=(s+m-1)%i;首先,求出出圈人的位置,这里用一个求余是为了实现圈循环(也就是将队列头尾相连),这里i是圈中剩余的人数(除去出圈后的人)。 当然,我们稍微注意一下,那就是没有第0位的出

圈人存在,所以这里如果s=0是不对的,

其实这种情况是出圈人是队尾的那一个人,所以这里加上一个判断:

if(s==0)s=i;

好了,我们取到了出圈人的位置了,那我们就要:

"则将p[i]置于数组的倒数第i个位置上,而原来第i+1个至倒数第i个元素依次向前移动一个位置"

实现这一句的算法过程的代码,可以看出也是一个循环:

w=p[s-1]; 首先,把出圈人的号码暂时放起来(因为此时倒数第i个位置还有人占据,不能替换掉)

接着我们要把倒数第i个位置腾空出来,

而这个算法的实现就是“第i+1个至倒数第i个元素依次向前移动一个位置”

明白了这句话的意思后,马上可以写出下面的一个循环代码来实现

for(j=s;j#define N 100;

#define S 1;

#define M 10;

int n; //圈中人数

int s; //第s个人开始报数

int m; //报数到m出圈

int p[100];

void josegh(void)

{

int i;//圈中剩余的人

int j;

int tmp;

// 初始化序号

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

{

p[i-1] = i;

}

for(i=n; i>1;i--)

{

s = (s+m-1)%i; //找出圈的人

if(s == 0) //没有0序号的人 0也就是最后位置

{

s = i;

}

tmp = p[s-1];

for(j=s;j=0; i--)

{

printf("%4d",p[i]);

fprintf(fp,"%4d",p[i]);

if(i%10 == 0)

{

printf("\n");

fprintf(fp,"\n");

}

}

}

OUT.DAT

10 20 30 40 50 60 70 80 90 100

11 22 33 44 55 66 77 88 99 12

24 36 48 61 73 85 97 9 25 38

52 65 79 93 6 21 37 53 68 83

98 15 31 47 64 82 1 17 35 56

74 92 13 32 54 75 95 18 42 63

87 8 39 62 89 16 45 72 3 29

67 96 28 69 4 43 81 23 59 7

57 5 58 19 78 41 2 84 51 46

34 49 76 94 71 27 91 14 86 26

展开阅读全文

温馨提示:

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。

2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。

3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。

4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。

5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。

6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。

7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。

关于本文

本文标题:第38套题:c语言出圈问题分析.doc

链接地址:https://www.renrendoc.com/p-14351055.html

c语言出圈问题10人,第38套题:c语言出圈问题分析.doc相关推荐

  1. windows7关闭计算机对话框,电脑弹出对话框很烦人怎么办?win7禁止对话框弹出的方法...

    在使用win7系统的过程中,如果系统中出现了错误或者是有某种提示的时候,,系统就会自动弹出一个提示框来提醒用户,但是有时候一些无关紧要的提示也会弹出来,这就非常的烦人了,所以有的用户想设置禁止对话框弹 ...

  2. c语言均值滤波程序,10种简单的数字滤波算法(C语言源程序)

    贴一个我的代码给大家 电路有市电 过零点检测 每次过零 启动150us的 TIMER1_ISR 中断 在3750 us开始,每隔150us采集一次市电的 ADC 以检测用的市电是110v还是220V ...

  3. c语言每个字符占10个字符位左对齐,C语言考前复习资料

    C语言最重要的知识点复习资料 总体上必须清楚的: 1)程序结构是三种: 顺序结构, 循环结构(三个循环结构), 选择结构(if 和switch) 2)读程序都要从main()入口, 然后从最上面顺序往 ...

  4. c语言上机题库20套题,C语言上机试题1-20套

    main() /*主函数 */ { system(\ printf(\} 说明:主函数中的clrscr()函数为TC下使用的清屏函数,在VC中不能使用,在本题中可以直接删除或改为system(\ 2 ...

  5. 地理信息考c语言,南师地理信息系统专业01方向真题C语言

    南师大考研 南师大C语言(含数据结构)试卷---2007 (1)设S为一个长度为n的字符串,其中串的字符各不相同,写出具体程序并计算出S中互异的非平凡子串,非空且不同于S本身的个数.(本题15分). ...

  6. 安徽省2019c语言二级答案,安徽省计算机等级二级考试真题C语言.doc

    PAGE 安徽省二级C笔试13年12月 第 PAGE 17 页 (共 NUMPAGES 17 页 ) 机密☆启用前 二〇一三年下半年全国高等学校(安徽考区) 计算机水平考试试卷 (二级 C语言程序设计 ...

  7. c语言循环链表约瑟夫问题的时间复杂度,用单向循环链表解决约瑟夫问题算法优劣性分析.doc...

    用单向循环链表解决约瑟夫问题算法优劣性分析 用单向循环链表解决约瑟夫问题算法优劣性分析 摘要: 首先由简单问题引入约瑟夫问题,然后用单向循环链表解决约瑟夫问题,最后对模拟方法及数学方法的优劣性进行分析 ...

  8. c语言 奥数题目及答案,小学奥数题C语言解法

    朋友给我发了一个小学的奥数题,尝试解了一会儿没有找到方法,于是编辑了一个小程序解决了 上面的是题目 下面的是实现的代码,仅做参考 #include #ifdef __cplusplus extern ...

  9. 如果有的明星不会使用计算机,盘点娱乐圈不会用电脑手机的10大原始明星:最后一位出书都是手写...

    原标题:盘点娱乐圈不会用电脑手机的10大原始明星:最后一位出书都是手写 刘雪华作为演艺界的老戏骨,演技是得到大家的认可的,可是她却不怎么懂得用电脑,所以她在自己的博客上发表声明,说自己不会用电脑,博客 ...

最新文章

  1. 问题 RadioButtonList+TextBox的复合控件如何做
  2. 基于plc计算机控制系统,基于PLC的工业控制系统特点的分析
  3. 华为荣耀畅玩7c计算机在那,华为荣耀畅玩7C内存多大
  4. matlab中统计数组中各数字(元素)出现的次数
  5. FIFA的完整形式是什么?
  6. android 闪存软件测试,手机为什么这么卡:闪存I/O测试AndroBench
  7. St_geometry 初始用
  8. html上下走马灯特效,上下左右滚动的走马灯文字代码
  9. win centos php语法,linux(centos5.5)/windows下nginx开启phpinfo模式功能的配置方法分享
  10. MySQL数据库学习2 - 数据库的操作
  11. 微信小程序开发工具下载及AppID查找
  12. linux波浪线是什么路径,波浪线符号(linux运维中特殊符号)
  13. LeetCode——777.在LRX字符串中交换相邻字符
  14. apktool 回编译说文件名或扩展名太长
  15. linux查看照片命令,php 及 linux 命令行方式读取 图片 exif 信息
  16. 从零开始- Android刷机指南一
  17. Linux安全之三大攻击(SYN,DDOS,CC)原理及处理的详解
  18. X64汇编语言寄存器结构及其与X86架构编程区别
  19. 第一章:Django入门篇
  20. 广义预测控制(GPC,含公式推导和仿真截图)

热门文章

  1. ubuntu 16.04下安装pytorch配置caffe2(cuda 9.0+cudnn 7.6)
  2. 获取MAC端当前系统语言
  3. html5学习笔记--leon
  4. [转载]MIDAS/Gen常见问题汇编(一) 转自百思论坛
  5. Java基础21 多线程线程两种实现方式 锁
  6. 使用vscode做笔记
  7. 快速求得 a和 b 的最大公约数
  8. Springboot整合FreeMarker
  9. Combining satellite imagery and machine learning to predict poverty
  10. 计算机任务无法结束,遇到Win7中任务管理器无法结束进程问题,如何解决