C语言练习题!!求高手解答

2. a,b,c,d,e,f,g七个人围着一个桌子
从a开始123报数,数到3的人退出
最后剩一个人的时候结束,问最后剩下谁?
编程实现
谢谢回答 可是 我还没学函数·。。能不能不用函数做出来啊·。 做出后给分

我的意思是我是初学者 只学了·循环 数组 剩下的 函数都没学

if for while 和数组 我学了这些就 。
你写的链表我不懂啊

#include "stdafx.h"
#include <iostream>
using namespace std;

struct child
{
int num;
child *link;
};

void init(int n); //初始化
void gamestart(int n,int m);//模拟游戏函数
child *head;//链表头
child *present; //当前结点
child *end;//链表尾

int main(int argc, char* argv[])
{
int m,n;
cout<<"请输入孩子的个数:"<<endl;
cin>>n;
cout<<"请输入正整数m"<<endl;
cin>>m;
init(n);
gamestart(n,m);
cout<<"第"<<present->num<<"个孩子获得胜利!"<<endl;
delete present;
return 0;
}

void init(int n)
{
head = new child;
head->num =1;
present=head;
for(int i=1;i<n;i++)
{
present->link=new child;
present->link->num=i+1;
present=present->link;
}
present->link=head;
end=present;
present=head;
}
void gamestart(int n,int m)
{
child *pGuard=end;
while(n!=1)
{
for(int j=1;j<m;j++)
{
pGuard=present;
present=present->link;
}
pGuard->link=present->link;
delete present;
present=pGuard->link;
n--;
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-07-04
这个问题是著名的约瑟夫问题的一个实例,你可以在百度百科上看一看这个问题的解答方案http://baike.baidu.com/view/213217.htm?fr=ala0_1
相似回答