打印

求各位大侠帮个忙!!非常感激(一道编程题)

[复制链接]
2171|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
linglingwo|  楼主 | 2008-4-27 11:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
tangzzbb| | 2008-5-6 12:43 | 只看该作者

提个思路吧

1>有N个人,可以定义一个数组来表示这些人。
unsigned int A[N];//本数组与人对应,注意M>0,N>0
2>给数组赋值,以表示其号码。
for(i=0;i<N;i++) A=i+1;//注意从第一号开始
3>第一次第M个人,因为是一圈,数到的人对应的数组应是
A[(M-1)%N]
4>第M个人退出,从M+1开始数
for(i=0;i<N-1;i++) B=A[((M-1)%N+1+i)%N];//重数把第M+1个人放在首列
for(i=0;i<N-1;i++) A=B;//重新把数据写回,注意此时人数只有N-1个了
5>重新执行第3,4步,依次递归调用。
6>在第3步上添加递归结束条件,
if(N=1) return(A[0]);//返回值就是人的号数

使用特权

评论回复
板凳
tangzzbb| | 2008-5-6 13:08 | 只看该作者

根据以上思路给出例程

#define N=100
#define M=10

unsigned int A[N],B[N];//定义数组
unsinged int MyFunc(unsigned int M,unsigned int N);

main()
{
unsinged int i,k;
for(i=0;i<N;i++) A=i+1;
k=MyFunc(N,M);//调用
}

unsinged int MyFunc(unsigned int M,unsigned int N)
{
unsigned int q;
if(N=1) return(A[0]);//返回值就是人的号数
for(i=0;i<N-1;i++) B=A[((M-1)%N+1+i)%N];//重数把第M+1个人放在首列
for(i=0;i<N-1;i++) A=B;//重新把数据写回,注意此时人数只有N-1个了
q=MyFunc(N-1,M);
return(q);
}

使用特权

评论回复
地板
原野之狼| | 2008-5-6 14:10 | 只看该作者

华为笔试题

这么用N和M行么?

使用特权

评论回复
5
gyt| | 2008-5-6 14:29 | 只看该作者

数据结构

数据结构的教材上几乎都有这个题目

看一下就行

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

10

帖子

0

粉丝