链表J 不敢死队问题
来源:互联网 发布:nginx 二级域名转发 编辑:程序博客网 时间:2024/06/08 11:28
Problem Description
有M个敢死队员要炸掉敌人的一个碉堡,谁都不想去,排长决定用轮回数数的办法来决定哪个战士去执行任务。如果前一个战士没完成任务,则要再派一个战士上去。现给每个战士编一个号,大家围坐成一圈,随便从某一个战士开始计数,当数到5时,对应的战士就去执行任务,且此战士不再参加下一轮计数。如果此战士没完成任务,再从下一个战士开始数数,被数到第5时,此战士接着去执行任务。以此类推,直到任务完成为止。
我们假设排长是1号,按照上面介绍,从一号开始数,数到5的那名战士去执行任务,那么排长是第几个去执行任务的? //5的倍数
Input
输入包括多试数据,每行一个整数M(0<=M<=10000)(敢死队人数),若M==0,输入结束,不做处理。
Output
输出一个整数n,代表排长是第n个去执行任务。
Example Input
9
6
223
0
Example Output
2
6
132
#include <stdio.h>#include <stdlib.h>struct node{ int data; struct node *next;};struct node *creat(int n){ struct node *p,*head,*tail; int i; p = (struct node *)malloc(sizeof(struct node)); p->data = 1; p->next = NULL; head = p; tail = p; 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);};void del(struct node *head){ struct node *p,*q;int num=0,count=0; int num=1;count=0; q = head; q = head; while(q->next!=head) { q = q->next; } while(1) { p = q->next; num++; if(num%5==0) { q->next = p->next; //此处已经将此结点不再参与之后的计数,已经从链表中删除。 count++; if(p->data==1) { printf("%d\n",count); break; } free(p); //删除结点也可以不释放内存空间 } else { q = p; } }}int main(){ int m; struct node *head; while(~scanf("%d",&m)&&m!=0) { head = creat(m); del(head); } return 0;}
阅读全文
0 0
- 链表J 不敢死队问题
- 约瑟夫问题(链表):不敢死队问题
- 不敢死队问题
- 不敢死队问题
- 不敢死队问题
- 不敢死队问题
- 不敢死队问题
- 不敢死队问题
- 不敢死队问题
- 不敢死队问题
- 不敢死队问题
- 不敢死队问题
- 不敢死队问题
- 不敢死队问题
- 不敢死队问题
- 不敢死队问题
- 2056不敢死队问题
- 不敢死队问题
- 链表I 约瑟夫问题(删除+计数!典题)
- hdfs rack机架感知配置
- ubuntu下安装网易云音乐
- OSI网络体系结构
- 黑客技术 —— Linux 命令行
- 链表J 不敢死队问题
- 第四课、C程序结构
- 性能核心概念
- 慎用Servlet成员变量-导致线程安全问题
- css之水平垂直居中篇
- BZOJ 2482 || SPOJ GSS2 Can you answer these queries II(线段树 离线 后缀和)
- 组合数取模
- 51单片机之外设——74HC138、74HC02、74HC573讲解(三)
- 贪心A 删数问题