TA的每日心情 | 开心 2014-6-18 08:29 |
---|
签到天数: 14 天 [LV.3]偶尔看看II
滴水大师
 
- 积分
- 2345
|
题目
解决代码及点评
- <pre code_snippet_id="91880" snippet_file_name="blog_20131202_1_2646179" class="cpp" name="code"></pre><pre code_snippet_id="91880" snippet_file_name="blog_20131202_1_2646179" class="cpp" name="code"><pre code_snippet_id="91880" snippet_file_name="blog_20131202_1_2646179" class="cpp" name="code"><pre code_snippet_id="91880" snippet_file_name="blog_20131202_1_2646179" class="cpp" name="code">/*
- 功能:13个人围成一圈,从第一个人开始顺序报号1、2、3。 凡报到“3”者退出圈子。找出最后留在圈子里的人原来的序号。
-
-
- */
-
- #include<stdio.h>
- #include<stdlib.h>
-
- #define N 13 //共13个人
-
- struct people //创建双向链表
- {
- int ID; //人物序号
- struct people *pNext; //下个元素的地址
- };
-
- typedef struct people PEO;
-
- void init(PEO *a,int n); //输入每个人的信息
-
- void main()
- {
- PEO a[N];
- init(a, N); //对人物信息进行初始化
-
- int total = N; //剩余人数,初始化为N
- int num = 1; //报数器
- PEO *p = &a[0];
- for (PEO *pPrior=&a[N-1];total!=1; p=p->pNext) //pPrior指向当前结点的前一个结点
- {
- if (num != 3){
- num++;
- pPrior = pPrior->pNext; //前结点向后移一个单位
- continue;
- }
- else
- {
- pPrior->pNext = p->pNext; //删除当前结点
- num = 1;
- total--; //生剩余人数--,当人数剩余为1时循环结束
- }
- num++;
- }
- printf("%d",p->ID);
- system("pause");
- }
-
- void init(PEO a[], int n)
- {
- for (int i = 0; i < n; i++)
- {
- a.ID = i + 1; //每个人的编好
- if (i != n - 1)
- {
- a.pNext = &a[i + 1]; //将下一个的地址赋给pNext
- }
- else
- {
- a.pNext = &a[0]; //将序号为1的地址赋给最后一个元素的pNext
- }
- }
- }</pre><br><br></pre></pre>
|
|