队列基础数据结构的小练习~
现在输入一个正整数n,代表n名士兵编号1-n,开始报数,先1212报数报到2者出列;然后123123报数报到3者出列;然后又1212报数&mIDdot;&mIDdot;&mIDdot;直到只剩下小于等于3个人,输出这三个人的编号。
例:
输入:20
输出:1 7 19
代码:
1 #include
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 }
结果:
总结以上是内存溢出为你收集整理的队列基础数据结构的小练习之士兵报数全部内容,希望文章能够帮你解决队列基础数据结构的小练习之士兵报数所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)