永发信息网

敢死队问题 有C语言编

答案:3  悬赏:80  手机版
解决时间 2021-02-14 11:26
有M个敢死队员要炸掉敌人的一碉堡,谁都不想去,排长决定用轮回数数的办法来决定哪个战士去执行任务。如果前一个战士没完成任务,则要再派一个战士上去。现给每个战士编一个号,大家围坐成一圈,随便从某一个战士开始计数,当数到5时,对应的战士就去执行任务,且此战士不再参加下一轮计数。如果此战士没完成任务,再从下一个战士开始数数,被数到第5时,此战士接着去执行任务。以此类推,直到任务完成为止。
排长是不愿意去的,假设排长为1号,请你设计一程序,求出从第几号战士开始计数才能让排长最后一个留下来而不去执行任务。 要求:至少采用两种不同的数据结构的方法实现哪位高手帮忙解决一下啊 急····
最佳答案
基本要求:1. 输入相应的参数M,以及开始执行任务的战士编号;2. 给出敢死队执行任务的顺序;3. 排长不愿意去的,假设排长为1号,求出从第几号战士开始计数才能让排长最后一个留下来而不去执行任务;高级要求:对于任意的M与间隔数(如题目中的5),若要求排长最后一个留下来的话,则第一个执行任务的展示编号是多少?
全部回答

帮你写了一种,已经测试过,利用数组实现的:

#include "stdio.h" #include <stdlib.h> int remain(int m,int kaishi){//数组赋初值0,被选到的元素赋1,最后为0的那个就是剩下的  int i,j,k;  int*t;  t= (int*)malloc((m+1)*sizeof(int));     for(i=0;i<m+1;i++){     t[i]=0;     }     for( i=1,k=kaishi-1; i<m; i++){     for(j=0; j<5; j++){     do{     k++;     if(k>m){     k-=m;     }     }while(t[k]==1);     }     t[k]=1;     }     for(i=1; i<m+1; i++){     if(t[i]==0){     return i;     }     }     free(t);     return 0; } void main() {  int i,m;  scanf("%d",&m);  for(i=1;i<m+1;i++)   if(remain(m,i)==1)printf("%d",i); }

帮你写了一种,已经测试过,利用数组实现的:#include "stdio.h" #include int remain(int m,int kaishi){//数组赋初值0,被选到的元素赋1,最后为0的那个就是剩下的 int i,j,k; int*t; t= (int*)malloc((m+1)*sizeof(int)); for(i=0;im){ k-=m; } }while(t[k]==1); } t[k]=1; } for(i=1; i
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯