| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1755 人关注过本帖
标题:[求助]有10个人围成一圈,顺序排号。从第一个人开始报数(从l到3报数),凡报 ...
只看楼主 加入收藏
oclassic
Rank: 1
等 级:新手上路
帖 子:140
专家分:0
注 册:2007-4-18
收藏
 问题点数:0 回复次数:11 
[求助]有10个人围成一圈,顺序排号。从第一个人开始报数(从l到3报数),凡报到3的人

这个题目有人问过的,不过还是没弄明白。大虾们帮下忙,谢啦。
最好有注释还有思路啊。

有10个人围成一圈,顺序排号。从第一个人开始报数(从l到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。

搜索更多相关主题的帖子: 顺序 排号 注释 
2007-04-23 20:25
ffaannggqq
Rank: 1
等 级:新手上路
帖 子:40
专家分:0
注 册:2006-12-23
收藏
得分:0 
用队列解

2007-04-23 20:33
oclassic
Rank: 1
等 级:新手上路
帖 子:140
专家分:0
注 册:2007-4-18
收藏
得分:0 
程序呢?我还没看过队列,用指针能行吧 给个程序呗~

编程群号码30772309群刚刚建立一个论坛http://tszbbs./?u=2 诚招斑猪哦
2007-04-23 20:45
jd205
Rank: 2
等 级:论坛游民
帖 子:139
专家分:69
注 册:2006-10-26
收藏
得分:0 

刚抄上,没运行~你看看吧~
#include<stdio.h>
#define N 50
int main()
{
int i,k,m,n,num[N],*p;
printf("Input number of person:n=");
scanf("%d",&n);
p=num;
for(i=0;i<n;i++)
*(p+i)=i+1;//以1至n为序为每个人编号
i=0;//i为每次循环时的计数变量
k=0;//k为按1、2、3报数时计数变量
m=0;//m为退出人数
while(m<n-1)//当退出的人数比n-1少时执行循环体
{
if(*(p+1)!=0)k++;
if(k==3)//对退出的人编号为设置为0
{
*(p+i)=0;
k=0;
m++;
}
i++;
if(i==n)i=0;//报数到尾后,i恢复到0

}
while(*p==0)p++;
printf("The last one is NO.%d\n",*p);
}

2007-04-23 22:29
oclassic
Rank: 1
等 级:新手上路
帖 子:140
专家分:0
注 册:2007-4-18
收藏
得分:0 
好像不对啊.~~ 

编程群号码30772309群刚刚建立一个论坛http://tszbbs./?u=2 诚招斑猪哦
2007-04-24 10:35
爱以走远
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:52
帖 子:7542
专家分:21
注 册:2007-3-16
收藏
得分:0 
用循环链表
算发就是 for(i=0;i<9;i++) /*删除9个*/
for(j=0;j<3;j++)
{ if(j==2)
q->next=p->next; /*删除报3的人*/
}
大慨是这样拉 你自己去写哈

   好好活着,因为我们会死很久!!!
2007-04-24 12:38
oclassic
Rank: 1
等 级:新手上路
帖 子:140
专家分:0
注 册:2007-4-18
收藏
得分:0 
不会啊

编程群号码30772309群刚刚建立一个论坛http://tszbbs./?u=2 诚招斑猪哦
2007-04-24 16:36
ayakyd
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2007-4-19
收藏
得分:0 

是出圈问题.蛮经典的.找找看应该蛮多的.

#include <stdio.h>

void main()
{
int i,m,k,*p,num[10];
p=num;
for (i=0;i<10;i++)
{
*(p+i)=i+1;//为10个人编号
}
i=0;
k=0;//计数1~3
m=0;//推出人数计数器
while (m<9)
{
if (*(p+i)!=0)
k++;
if (k==3)
{
*(p+i)=0;//设为0,表示退出
k=0;//重新计数
m++;
}
i++;
if (i==10)//从头报数
i=0;
}
while (*p==0)
{
p++;
}
printf("%d\n",*p);
}

这个参考下.

2007-04-24 16:54
oclassic
Rank: 1
等 级:新手上路
帖 子:140
专家分:0
注 册:2007-4-18
收藏
得分:0 
谢谢楼上的兄弟~

编程群号码30772309群刚刚建立一个论坛http://tszbbs./?u=2 诚招斑猪哦
2007-04-24 20:41
限量版猪头
Rank: 2
等 级:论坛游民
威 望:1
帖 子:165
专家分:30
注 册:2006-2-5
收藏
得分:0 

我再给个~这个问题是很经典的,也是有名字的,称做josephus问题~
#include<stdio.h>
#include<conio.h>
main()
{
int num=10; //假设有10个小孩
int interval; //报的数
int a[num],i;
char flag='y';

while(flag=='y')
{
for(i=0;i<num;i++) //给孩子编号
{
a[i]=i+1;
printf("%d ",a[i]);
}

printf("\nplease enter the interval : ");
scanf("%d",&interval);

int k=1,j; //k表示第几个小孩,当k==num时,表示结束
i=-1;

while(1)
{
for(j=0;j<interval;)
{
i=(i+1)%num;
if(a[i]!=0)
j++;
}
if(k==num) break;

printf("%d ",a[i]);
a[i]=0; //表示孩子已经离开
k++;
}
printf("\nthe last one is : %d" ,a[i]);
printf("\ncontinue? y/n\n\n");
flag=getch();
}


}

[此贴子已经被作者于2007-4-25 10:01:40编辑过]


2007-04-25 09:59
快速回复:[求助]有10个人围成一圈,顺序排号。从第一个人开始报数(从l到3报数), ...
数据加载中...
 
   



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

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