| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1252 人关注过本帖
标题:13个人围圈圈转 自编代码问题
只看楼主 加入收藏
cqm9266
Rank: 3Rank: 3
来 自:福建
等 级:论坛游侠
帖 子:174
专家分:186
注 册:2011-10-28
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:14 
13个人围圈圈转 自编代码问题
13个人 报数1,2,3循环 报到3的出局出去  继续报数 13个人围成的是圈圈 我不会数据链就先编了个代码 发现根本走不了 没错误但是不值得为什么
#include<stdio.h>
static int a[14]={0,1,2,3,4,5,6,7,8,9,10,11,12,13};
int sort(int i)
{int k,j;
for(k=1,j=0;k<=13;k++)
if(a[k]==0) j++;
if(j==13) return 0;
    if(i>13) sort(i-13);
do
{
if(a[0]!=0) a[i]=0,printf("%d号被淘汰!\n",i),i=i+3,sort(i);
else if(a[i]==0) i++,sort(i);
} while (i<=13);
}

void main()
{printf("BEGIN!\n");
sort(3);
}

2011-12-15 23:02
我是少飞侯
Rank: 1
等 级:新手上路
帖 子:6
专家分:4
注 册:2011-12-3
收藏
得分:2 
我给你一个思路吧。。。就是用指针做,把尾指针指向头指针,遇到3的倍数就删掉,最后就得到一个数了。。。
2011-12-16 00:00
zy_space
Rank: 5Rank: 5
等 级:职业侠客
帖 子:163
专家分:364
注 册:2011-11-14
收藏
得分:2 
我上数据库技术需要学三级C,三级C习题里面有一道题目类似,那道题是100个人。程序的关键代码如下:

void Josegh(void)

{

int i,t;

for(i=0;i<n;i++)
p[i]=i+1; /*将数组元素赋值为循环变量加1*/

s=s-1; /*令s指向起始元素在数组p中的位置*/

while(n>1)
{

s=(s+m-1)%n; /*寻找下一个报数为m的人*/

t=p[s]; /*将找到的编号保存到临时变量t中*/

for(i=s+1;i<n;i++)
 p[i-1]=p[i]; /*将出圈人的位置以后的所有元素向前移动一位*/

n--; /*总人数减1*/

p[n]=t; /*将出圈人保存到数组p中有效元素的后面一位*/

}

}

本题主要考查的是出圈问题。
根据题目给出的步骤,第一步用for循环和变量i将1到100赋值给数组p,
第二步让s指向报数为m的人,然后用for循环将s位置以后、
倒数第i个位置以前的所有元素向前移动一位,
元素p[s]移动到数组的倒数第i个位置,再将总人数减1,
第三步将第二步用while循环实现,当p只剩下一个元素时循环结束。
这样最后得到的p逆序就是出圈的顺序。

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

希望对LZ有帮助~

何必等待?梦在今朝
2011-12-16 03:05
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:2 
回复 3楼 zy_space
數組元素數目多的時候不要移動,元素本身尺寸大和複雜(有可能是結構体甚至類的實例對象)時也不要移動。再考慮一個不移動元素的方案吧。學指針,就用在這方面,不亂用,但該用還得用。

授人以渔,不授人以鱼。
2011-12-16 03:25
zy_space
Rank: 5Rank: 5
等 级:职业侠客
帖 子:163
专家分:364
注 册:2011-11-14
收藏
得分:0 
回复 4楼 TonyDeng
好的,那我再想想

何必等待?梦在今朝
2011-12-16 08:26
hnuhsg1226
Rank: 9Rank: 9Rank: 9
来 自:中国
等 级:蜘蛛侠
威 望:2
帖 子:314
专家分:1314
注 册:2011-3-27
收藏
得分:2 
贵在思考啊

我的地盘
2011-12-16 09:32
yulin3192
Rank: 2
等 级:论坛游民
帖 子:17
专家分:34
注 册:2011-6-24
收藏
得分:2 
看到一个牛人啊
嘿嘿
2011-12-16 09:39
zy_space
Rank: 5Rank: 5
等 级:职业侠客
帖 子:163
专家分:364
注 册:2011-11-14
收藏
得分:0 
以下是引用yulin3192在2011-12-16 09:39:48的发言:

看到一个牛人啊
嘿嘿

LS,论坛牛人很多的其实

何必等待?梦在今朝
2011-12-16 09:57
绿茶盖儿
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:1
帖 子:363
专家分:1852
注 册:2011-9-3
收藏
得分:2 
用循环链表
2011-12-16 10:08
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
收藏
得分:2 
用循环链表比较方便,用一个指针指向链表中的数据,不断地计数,满足条件就删除指向值,把它从链表中摘除

数据量小的时候也可以用数组来实现。这是著名的约瑟夫环的问题。

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2011-12-16 11:29
快速回复:13个人围圈圈转 自编代码问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017647 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved