敢死队的问题!!用C语言和C++编写程序代码!

来源:百度知道 编辑:UC知道 时间:2024/06/07 07:14:07
问题描述:有M个敢死队员要炸掉敌人的一碉堡,谁都不想去,排长决定用轮回数数的办法来决定哪个战士去执行任务。如果前一个战士没完成任务,则要再派一个战士上去。现给每个战士编一个号,大家围坐成一圈,随便从某一个战士开始计数,当数到5时,对应的战士就去执行任务,且此战士不再参加下一轮计数。如果此战士没完成任务,再从下一个战士开始数数,被数到第5时,此战士接着去执行任务。以此类推,直到任务完成为止。
排长是不愿意去的,假设排长为1号,请你设计一程序,求出从第几号战士开始计数才能让排长最后一个留下来而不去执行任务。

要求:1.程序要完整,补充内容(//)也要详细
2.用C语言和C++分别编写程序代码

谢谢大家啦!!!

//敢死队问题,使用单向循环链表
#include<iostream>
using namespace std;

typedef struct node{
int num;
node *next;
}lnode; //定义结点
typedef struct{
lnode *cl;
}linklist;

void main()
{
int M;
int i;
int start,count;
linklist l;
cout<<"enter the value of M :";
cin>>M;

for(start=1;start<=M;start++)//start为测试起点
{
//初始化链表
lnode *p=new lnode;
l.cl=p;
l.cl->num=1;
for(i=2;i<=M-1;i++)
{
lnode *q=new lnode;
q->num=i;
p->next=q;
p=q;
}
lnode *t=new lnode;
t->num=M;
p->next=t;
p=t;
t->next=l.cl;

//找到起点
p=l.cl;
for(i=1;i<start;i++)
{
p=p->next;
}

count=0;
while(count<=M-1)
{
for(i=1;i<5;i++)
{
t=p;
p=t->next;
}
t->next=