| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1630 人关注过本帖, 1 人收藏
标题:请教一道题,老费脑筋了
只看楼主 加入收藏
看月亮22
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2006-9-20
收藏(1)
 问题点数:0 回复次数:9 
请教一道题,老费脑筋了
有N个人围成圈,顺序排号.报数是三的退出,问剩下的人原来的序号.
搜索更多相关主题的帖子: 费脑筋 序号 顺序 排号 
2006-09-20 21:12
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
收藏
得分:0 
http://www.bc-cn.net/bbs/dispbbs.asp?boardID=5&ID=91313&page=1
心动音符 老伤心了 没人理他
看到你的帖子更郁闷
你还是直接问问他好了
2006-09-20 21:17
菜鸟笨鸟
Rank: 1
等 级:新手上路
帖 子:87
专家分:0
注 册:2006-9-2
收藏
得分:0 
以下是引用看月亮22在2006-9-20 21:12:45的发言:
有N个人围成圈,顺序排号.报数是三的退出,问剩下的人原来的序号.

#include<stdio.h>
#define N 50 //定义数组的最大长度 下面输入的n应该小于这个长度
void main()
{
int i,k,m,n,num[N],*p;
printf("请输入总人数:");
scanf("%d",&n);
p=num;//指针指向数组
for(i=0;i<n;i++)
*(p+i)=i+1;//利用循环为数组中的每个元素赋编号1-n
i=0;//控制指针移动
k=0;//报数器1-3
m=0;//退出人数计数
while(m<n-1)
{
if(*(p+i)!=0)//开始报数 只要编号不等于0报数器1
k++;
if(k==3)//报数到3时
{
*(p+i)=0;//将该人的编号置为0,表示该人已经退出
k=0;//报数器清零
m++;//退出人数加1
}
i++;//指针移动
if(i==n)//如果遇到最后一个n则从第一个开始
i=0;
}
while(*p==0)//检索编号不是0的人 即最后留下的人
p++;
printf("编号为%d的学员最后留下来了\n",*p);

}
运行下。。。。。。。。。。。输入10个 输出编号是 4的留下


偶是大菜鸟~!
2006-10-05 12:33
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
/*约瑟复环,数组做法*/
#include<stdio.h>
#define N 50
int main()
{
int n,m,i,count=0,num=0,data[N];
printf("输入队列中总人数和要报的数:");
scanf("%d%d",&n,&m);
for(i=0;i<n;i++)//初始化,全部进队。
{
data[i]=0;
}
i=0;
while(n-count>1)
{
if(num<m&&data[i]==0) //报数
{
num++;
}
if(num==m) //处理出队
{
data[i]=1; //标记表示出队
num=0; //报数器置0
count++; //出队人数增加
//printf("第%d个出列的是%d\n",count,i+1);
}
i=(i+1)%n;
}
i=0;
while(i<n&&data[i]==1) //寻找最后一个
{
i++;
}
printf("剩下的是第%d个\n",i+1);
return(0);
}

倚天照海花无数,流水高山心自知。
2006-10-05 12:43
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 

/*链表做法*/
#include<stdio.h>
#include<malloc.h>


typedef struct node{
int info;
struct node *next;
};

node *tbuildhlink(int n) /*带头节点的尾插法*/
{
node *head,*s,*p2;
int i=1;

head=(node *)malloc(sizeof(node));
p2=head;
while(i<=n)
{
s=(node *)malloc(sizeof(node));
s->info=i;
p2->next=s;
p2=s;
i++;
}
if(p2) p2->next=head;
return(head);
}

void Display(struct node* head)
{
node *p;
p=head->next;
if(!p)
{
printf("\nthe hlink is empty!");
}
else
{
printf("\nthe value of the hlink is:\n");
while(p!=head)
{
printf("%d--->",p->info);
p=p->next;
}
}
printf("^\n");
}
int delete_node(struct node *head,int n,int m)
{
int count=1,sum=n;
struct node *p,*pre;
pre=head;
p=pre->next;
while(sum>1)
{
if(p==head)
{
p=p->next;
}
if(count<m)
{
pre=p;
p=p->next;
count++;
}
if(count==m)
{
if(p==head)
{
p=p->next;
}
//printf("第%d个人出列.\n",p->info);
pre->next=p->next;
free(p);
p=pre->next;
count=1;
sum--;
}
}
return(pre->info);
}


int main()
{
struct node* head;
int n,m;

printf("输入n m:");
scanf("%d%d",&n,&m);
head=tbuildhlink(n);
Display(head);
printf("最后剩下第%d个.\n",delete_node(head,n,m));
return(0);
}


倚天照海花无数,流水高山心自知。
2006-10-05 12:46
sunyuantz
Rank: 1
等 级:新手上路
威 望:1
帖 子:407
专家分:0
注 册:2006-3-20
收藏
得分:0 

好复杂,我得仔细看看,这道题比较经典


我不是名人,所以不要签名。等哪天我成名人了......你都认识我了还要签名干嘛!
2006-10-05 13:01
csight
Rank: 1
等 级:新手上路
威 望:1
帖 子:293
专家分:0
注 册:2006-6-11
收藏
得分:0 

/*约瑟夫问题*/
#include"stdio.h"
#define N 100
#define M 3
main()
{
int i,a[N+1],m,cur_m=1,n=N;
for(i=1;i<=N;i++)
a[i]=i;
while(1)
{
if(n==1) {
printf("\n%d 号留下\n",a[1]);
break;}
m=(cur_m+M-1)%n;
m==0?cur_m=n:cur_m=m;
printf("%d ",a[cur_m]);
if(m==0) cur_m=1;
else for(i=m;i<n;i++)
a[i]=a[i+1];
n--;
}

}


头可断,发型不可乱;血可流,皮鞋不可不擦油;
2006-10-05 20:09
yzq94192448
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2007-1-22
收藏
得分:0 

帮帮我做下我的题啊!


2007-01-22 22:06
yzq94192448
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2007-1-22
收藏
得分:0 


长整数的处理。假定用一个整型数组表示一个长整数,数组的每个元素存储长整数的一位数字,则实际的长整数m表示为:
m=a[k]×10k-1+a[k-1]×10k-2+….+a[2]×10+a[1]
其中a[0]保存该长整数的位数。求:
(1) 长整数乘普通整数;
(2) 长整数除普通整数。

二 用C语言为学生宿舍管理人员编写一个宿舍管理软件。设某宿舍有:101,102,201,202四个房间,每个房间可住学生<=4人,链表存储结构:学号、姓名、房间号、后续指针,按房间号有序,实现学生的入住、退房和查询,按给定学号、姓名、房号查询。


小学生数学测试软件的编写,要求:
(1) 可选择题型(+,-,*);
(2) 可选择每次答题的个数;
(3) 每次输入答案后应判断对错,若答案错误,应给出正确答案;
(4) 最后给出做对题目的总个数。

约瑟夫生者死者游戏:30个旅客同乘一条船,因为严重超载,非常危险,大家一致同意将一半的旅客投入海中。30个旅客围成一圈,由第一个人开始,依次报数,数到第9人,便把他投入大海中,然后从他的下一个人数起,数到第9人,再将他投入大海,如此循环,直到剩下15个乘客为止。问哪些位置是将被扔下大海的位置。试用数组和单循环链表来解决本问题,并比较两种数据结构在问题求解中的难易程度。


2007-01-22 22:12
yzq94192448
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2007-1-22
收藏
得分:0 
以下是引用yzq94192448在2007-1-22 22:12:13的发言:


长整数的处理。假定用一个整型数组表示一个长整数,数组的每个元素存储长整数的一位数字,则实际的长整数m表示为:
m=a[k]×10k-1+a[k-1]×10k-2+….+a[2]×10+a[1]
其中a[0]保存该长整数的位数。求:
(1) 长整数乘普通整数;
(2) 长整数除普通整数。

二 用C语言为学生宿舍管理人员编写一个宿舍管理软件。设某宿舍有:101,102,201,202四个房间,每个房间可住学生<=4人,链表存储结构:学号、姓名、房间号、后续指针,按房间号有序,实现学生的入住、退房和查询,按给定学号、姓名、房号查询。


小学生数学测试软件的编写,要求:
(1) 可选择题型(+,-,*);
(2) 可选择每次答题的个数;
(3) 每次输入答案后应判断对错,若答案错误,应给出正确答案;
(4) 最后给出做对题目的总个数。

约瑟夫生者死者游戏:30个旅客同乘一条船,因为严重超载,非常危险,大家一致同意将一半的旅客投入海中。30个旅客围成一圈,由第一个人开始,依次报数,数到第9人,便把他投入大海中,然后从他的下一个人数起,数到第9人,再将他投入大海,如此循环,直到剩下15个乘客为止。问哪些位置是将被扔下大海的位置。试用数组和单循环链表来解决本问题,并比较两种数据结构在问题求解中的难易程度。

bang wo xia


2007-01-22 22:13
快速回复:请教一道题,老费脑筋了
数据加载中...
 
   



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

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