码迷,mamicode.com
首页 > 其他好文 > 详细

队列之士兵报数

时间:2018-10-28 18:01:02      阅读:312      评论:0      收藏:0      [点我收藏+]

标签:div   输出   tail   分享   输入   code   style   cin   mes   

队列基础数据结构的小练习~

现在输入一个正整数n,代表n名士兵编号1-n,开始报数,先1212报数报到2者出列;然后123123报数报到3者出列;然后又1212报数···直到只剩下小于等于3个人,输出这三个人的编号。

例:

输入:20

输出:1 7 19

代码:

 1 #include <iostream>
 2 using namespace std;
 3 int que[10001] = { 0 };
 4 int main()
 5 {
 6     int n;
 7     cin >> n;
 8     int head = 1, tail = 1;
 9     for (int i = 1; i <= n; i++) que[tail++] = i;
10     while (1)
11     {
12         n = tail - head;
13         if (tail - head <= 3)break;
14         for (int i = 1; i <= n; i++)
15         {
16             if (i % 2 == 1)que[tail++] = que[head];
17             head++;
18         }
19         n = tail - head;
20         if (tail - head <= 3)break;
21         for (int i = 1; i <= n; i++)
22         {
23             if (i % 3 != 0)que[tail++] = que[head];
24             head++;
25         }
26     }
27     for (int i = head; i < tail; i++)
28     {
29         cout << que[i] << " ";
30     }
31 }

结果:

技术分享图片

 

队列之士兵报数

标签:div   输出   tail   分享   输入   code   style   cin   mes   

原文地址:https://www.cnblogs.com/ljy1227476113/p/9866101.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!