sdut 链表10------7-10 sdut-C语言实验-不敢死队问题

简介: sdut 链表10------7-10 sdut-C语言实验-不敢死队问题

7-10 sdut-C语言实验-不敢死队问题


分数 20


全屏浏览


切换布局


作者 马新娟


单位 山东理工大学


说到“敢死队”,大家不要以为我来介绍电影了,因为数据结构里真有这么道程序设计题目,原题如下:


有M个敢死队员要炸掉敌人的一个碉堡,谁都不想去,排长决定用轮回数数的办法来决定哪个战士去执行任务。如果前一个战士没完成任务,则要再派一个战士上去。现给每个战士编一个号,大家围坐成一圈,随便从某一个战士开始计数,当数到5时,对应的战士就去执行任务,且此战士不再参加下一轮计数。如果此战士没完成任务,再从下一个战士开始数数,被数到第5时,此战士接着去执行任务。以此类推,直到任务完成为止。


这题本来就叫“敢死队”。“谁都不想去”,就这一句我觉得这个问题也只能叫“不敢死队问题”。今天大家就要完成这道不敢死队问题。我们假设排长是1号,按照上面介绍,从1号开始数,数到5的那名战士去执行任务,那么排长是第几个去执行任务的?

输入格式:

输入包括多组数据,每组一行,包含一个整数M(0<=M<=10000)(敢死队人数),若M==0,输入结束,不做处理。

输出格式:

输出一个整数n,代表排长是第n个去执行任务。

输入样例:

9
6
223
0

输出样例:

在这里给出相应的输出。例如:

2
6
132


代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB


#include <stdio.h>
#include <stdlib.h>
struct node
{
  int data;
  struct node* next;
};
int main()
{
  int i, n, sum;
  struct node* head, * tail, * p, * t;
  while (~scanf("%d", &n) && n != 0)
  {
    head = (struct node*)malloc(sizeof(struct node));
    head->next = NULL;
    head->data = 1;
    tail = head;
    for (i = 2; i <= n; i++)
    {
      p = (struct node*)malloc(sizeof(struct node));
      p->data = i;
      p->next = NULL;
      tail->next = p;
      tail = p;
    }
    tail->next = head;//循环建立链表,与“约瑟夫问题”一样
    p = head;
    t = tail;
    sum = 0;
    while (p)//即使剩下最后一个排长也要遍历
    {
      for (i = 1; i <= 4; i++)//每五个作为一个周期,从“初始点”走四步就到了“第五个结点”
      {
        p = p->next;
        t = t->next;
      }
      if (p->data == 1)
      {
        sum++;
        break;
      }
      else
      {
        sum++;
        t->next = p->next;
        p = p->next;
      }
    }
    printf("%d\n", sum);
  }
}
目录
相关文章
|
4月前
链表9(优化版)7-9 sdut-C语言实验-约瑟夫问题
链表9(优化版)7-9 sdut-C语言实验-约瑟夫问题
19 0
|
4月前
链表5(考试用)7-5 sdut-C语言实验-链表的逆置
链表5(考试用)7-5 sdut-C语言实验-链表的逆置
24 0
|
4月前
链表8(法二考试专用)7-8 sdut-C语言实验-双向链表
链表8(法二考试专用)7-8 sdut-C语言实验-双向链表
19 0
|
4月前
链表4(法二)------7-4 sdut-C语言实验-单链表中重复元素的删除
链表4(法二)------7-4 sdut-C语言实验-单链表中重复元素的删除
32 0
|
4月前
链表6(法二好理解)------ 7-6 sdut-C语言实验-有序链表的归并分数 20
链表6(法二好理解)------ 7-6 sdut-C语言实验-有序链表的归并分数 20
23 0
|
6月前
【移除链表元素】LeetCode第203题讲解
【移除链表元素】LeetCode第203题讲解
|
5月前
|
存储 SQL 算法
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
|
5月前
|
存储 SQL 算法
LeetCode 题目 86:分隔链表
LeetCode 题目 86:分隔链表
|
5月前
|
存储 算法 Java
【经典算法】Leetcode 141. 环形链表(Java/C/Python3实现含注释说明,Easy)
【经典算法】Leetcode 141. 环形链表(Java/C/Python3实现含注释说明,Easy)
48 2
|
6月前
<数据结构>五道LeetCode链表题分析.环形链表,反转链表,合并链表,找中间节点.
<数据结构>五道LeetCode链表题分析.环形链表,反转链表,合并链表,找中间节点
50 1