HDU 1276 士兵队列训练问题
2014-03-20 14:07
176 查看
士兵队列训练问题
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 3137 Accepted Submission(s): 1443
Problem Description
某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下的向小序号方向靠拢,再从头开始进行一至三报数,凡报到三的出列,剩下的向小序号方向靠拢,继续从头开始进行一至二报数。。。,以后从头开始轮流进行一至二报数、一至三报数直到剩下的人数不超过三人为止。
Input
本题有多个测试数据组,第一行为组数N,接着为N行新兵人数,新兵人数不超过5000。
Output
共有N行,分别对应输入的新兵人数,每行输出剩下的新兵最初的编号,编号之间有一个空格。
Sample Input
2
20
40
Sample Output
1 7 19
1 19 37
算是最简单的关于链表的题了吧!如果还有更简单的,期望各位推荐
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/laugh.gif)
。虽说是原创,其实只是半原创
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/despise.gif)
,抄了一遍大牛们的代码,然后根据自己的理解加了注释,有什么不对的地方还请大牛们批评指正
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/cute.gif)
代码:
#include<stdio.h> #include<stdlib.h> typedef struct node { int num; struct node *next; } S;///定义节点 S *l;///定义一个指向结构体的指针 int n;///链表的元素个数 S *init() { S *L,*q,*s; int i; L=(S*)malloc(sizeof(S)); L->next=NULL;///头结点指针域为空 s=L;///让指针指向头节点 for(i=1; i<=n; i++) { q=(S *)malloc(sizeof(S));///申请空间 q->num=i;///赋值 q->next=NULL;///置空 s->next=q;///连接头结点和第一个子节点 s=s->next;///指针后移 } return L;///返回到头结点 } void dele(int x) { S *s=l,*q;///s指向头结点 int i=1;///寻找删除点 while(s->next) { if(x==i) { i=1; q=s->next;///指针q指向当前头结点的后一个元节点 s->next=s->next->next;///移动指针位置,到q指向节点的后一个节点 free(q);///释放空间,删除元素 n--;///删除元素后,链表大小-1 } else { i++; s=s->next;///指针后移 } } } void print() { S *s=l->next,*q; while(s) { if(s->next==NULL) printf("%d\n",s->num); else printf("%d ",s->num); // q=s; s=s->next; // free(q); /**每输出一个节点就释放一个节点的空间 这样做应该是为了节省空间,但是我把两个代码 都提交后发现在时间和空间上并没有什么区别, 更详细的还请各位大神讲解**/ } } int main() { int t; scanf("%d",&t); while(t--) { int flag=0; scanf("%d",&n); l=init(); while(n>3) { if(flag==0) { dele(2); flag=1; } else { dele(3); flag=0; } } print(); } return 0; }
相关文章推荐
- 士兵队列训练问题
- 士兵队列训练问题,此题太水
- 士兵队列训练问题
- HDU1274 士兵队列训练问题
- HDU1276-士兵队列训练问题
- HDU 1276 士兵队列训练问题
- HDU 1276 士兵队列训练问题
- (hdu step 8.1.6)士兵队列训练问题(数据结构,简单模拟——第一次每2个去掉1个,第二次每3个去掉1个.知道队伍中的人数<=3,输出剩下的人 )
- hdu 1276 士兵队列训练问题
- HDUOJ 1276 - 士兵队列训练问题
- HDOJ 士兵队列训练问题 JAVA 1276
- hdu-1276-士兵队列训练问题
- HDU1274 士兵队列训练问题
- hdu(1276)士兵队列训练问题
- hdu1276(士兵队列训练问题) java集合水过
- HDU1276士兵队列训练问题 循环队列
- hdu - 1276 士兵队列训练问题 - 简单模拟
- HDU 1276 士兵队列训练问题 解题心得
- 杭电Problem 1276 士兵队列训练问题
- 士兵队列训练问题