链表之不敢死队问题
2018-02-10 14:34
246 查看
题目:
不敢死队问题
Time Limit: 1000 ms Memory Limit: 65536 KiB
Submit Statistic Discuss
Problem Description
说到“敢死队”,大家不要以为我来介绍电影了,因为数据结构里真有这么道程序设计题目,原题如下:
有M个敢死队员要炸掉敌人的一个碉堡,谁都不想去,排长决定用轮回数数的办法来决定哪个战士去执行任务。如果前一个战士没完成任务,则要再派一个战士上去。现给每个战士编一个号,大家围坐成一圈,随便从某一个战士开始计数,当数到5时,对应的战士就去执行任务,且此战士不再参加下一轮计数。如果此战士没完成任务,再从下一个战士开始数数,被数到第5时,此战士接着去执行任务。以此类推,直到任务完成为止。
这题本来就叫“敢死队”。“谁都不想去”,就这一句我觉得这个问题也只能叫“不敢死队问题”。今天大家就要完成这道不敢死队问题。我们假设排长是1号,按照上面介绍,从一号开始数,数到5的那名战士去执行任务,那么排长是第几个去执行任务的?
Input
输入包括多试数据,每行一个整数M(0<=M<=10000)(敢死队人数),若M==0,输入结束,不做处理。
Output
输出一个整数n,代表排长是第n个去执行任务。
Sample Input
9
6
223
0
Sample Output
2
6
132
Hint
解题代码:
不敢死队问题
Time Limit: 1000 ms Memory Limit: 65536 KiB
Submit Statistic Discuss
Problem Description
说到“敢死队”,大家不要以为我来介绍电影了,因为数据结构里真有这么道程序设计题目,原题如下:
有M个敢死队员要炸掉敌人的一个碉堡,谁都不想去,排长决定用轮回数数的办法来决定哪个战士去执行任务。如果前一个战士没完成任务,则要再派一个战士上去。现给每个战士编一个号,大家围坐成一圈,随便从某一个战士开始计数,当数到5时,对应的战士就去执行任务,且此战士不再参加下一轮计数。如果此战士没完成任务,再从下一个战士开始数数,被数到第5时,此战士接着去执行任务。以此类推,直到任务完成为止。
这题本来就叫“敢死队”。“谁都不想去”,就这一句我觉得这个问题也只能叫“不敢死队问题”。今天大家就要完成这道不敢死队问题。我们假设排长是1号,按照上面介绍,从一号开始数,数到5的那名战士去执行任务,那么排长是第几个去执行任务的?
Input
输入包括多试数据,每行一个整数M(0<=M<=10000)(敢死队人数),若M==0,输入结束,不做处理。
Output
输出一个整数n,代表排长是第n个去执行任务。
Sample Input
9
6
223
0
Sample Output
2
6
132
Hint
解题代码:
#include<stdio.h> #include<stdlib.h> struct node { int data; struct node*next; }; struct node*create(int n) { struct node*head,*p,*tail; head=(struct node*)malloc(sizeof(struct node)); head->next=NULL; head->data=1; tail=head; int i; 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; return head; } int main() { struct node*h; int n; while(~scanf("%d",&n)&&n) { int count=0,num=0; h=create(n); struct node*p,*q; p=h->next; while(p->next!=h) { p=p->next; } while(count<n)//在这个题中必须计算到最后一个,小于谁代表计算到谁,在上一个约瑟夫问题上,之所以计算到N-1是因为要输出最后一个,比如说6个人人就要计算到5,因为此时p->next=q->next,已经指向最后一个数了,而这个题就要做到最后一个才可以判断 { q=p->next; num++; if(num%5==0) { count++; if(q->data==1) { printf("%d\n",count); break; } else { p->next=q->next; } } else p=q; } } return 0; }
相关文章推荐
- 链表J 不敢死队问题
- SDUT OJ 不敢死队问题——链表
- sdut.acm 2012级《程序设计基础Ⅱ)》_链表 不敢死队问题
- 约瑟夫问题(链表):不敢死队问题
- 各种实现队列的问题:链表实现,栈实现队列及队列实现栈
- 链表倒置问题答案--2008年4月份二级C
- 3.2数据结构之指针和链表 1748:约瑟夫问题
- 数据结构学习中的简单问题(一):用链表方式实现的队列输出杨辉三角
- 剑指offer_面试题15_链表中倒数第k个节点(考虑问题要全面)
- 链表常见面试题一:基本问题
- C语言强化(七)链表相交问题_5 找到两个有环链表的相交结点
- 第四周项目3单链表的应用问题2
- C# 注销掉事件,解决多播委托链表的问题
- list_head双向链表的删除问题
- 链表奇偶排序以及反转问题
- 判断单链表是否存在环,判断两个链表是否相交问题详解
- 判断单链表是否存在环,判断两个链表是否相交问题详解
- 链表操作中易错的小问题
- 单链表是否有环及双链表相交问题
- 约瑟夫环问题(不带头结点单循环链表实现和数组实现)