133 - The Dole Queued
2016-08-18 07:00
330 查看
原题大意:
编号1-N的N个人由1开始逆时针站成一个环。
从第一个人开始逆时针数K个人;再从第N个人开始顺时针数M个人,第K、M出队。
如果KM是同一个人,只出队一次。
从K逆时针下一个人、N顺时针下一个人开始,重复上述步骤。
直到队列为空。
思路:
关键字:数据结构
两种实现方式:双向链表
环形数组
此处选用数组。
二个操作:1.从某位置逆时针数K个 counter_clockwise(int i,int k)
2.从某位置顺时针数M个 clockwise(int i,int m)
代码:
编号1-N的N个人由1开始逆时针站成一个环。
从第一个人开始逆时针数K个人;再从第N个人开始顺时针数M个人,第K、M出队。
如果KM是同一个人,只出队一次。
从K逆时针下一个人、N顺时针下一个人开始,重复上述步骤。
直到队列为空。
思路:
关键字:数据结构
两种实现方式:双向链表
环形数组
此处选用数组。
二个操作:1.从某位置逆时针数K个 counter_clockwise(int i,int k)
2.从某位置顺时针数M个 clockwise(int i,int m)
代码:
#include<iostream> using namespace std; int a[20]; int N, K, M; int length; //从位置i开始逆时针数k位(当前的数要被数),返回第k位的位置 //如果一直都找不到怎么办? int counter_clockwise(int i,int k) { int cnt = k; int j = i ; while(true){ if (a[j] != -1) { cnt--; if (cnt == 0)break; } if (j == 0)j = N - 1; else j--; } return j; } //从位置i开始顺时针数m位(当前的数要被数),返回第M位的位置 int clockwise(int i,int m) { int cnt = m; int j = i; while (cnt>0) { if (a[j] != -1) { cnt--; if (cnt == 0)break; } if (j == N-1)j = 0; else j++; } return j; } int main() { FILE*stream; freopen_s(&stream, "C:\\Users\\zgwng\\Desktop\\133.txt", "r", stdin); scanf_s("%d %d %d", &N, &K, &M); while(N!=0){ getchar(); for (int i = 0; i < N; i++) a[i] = N - i; length = N; int start = N - 1, end = 0; while (length != 0) { int p1 = counter_clockwise(start, K); int p2 = clockwise(end, M); if (p1 == p2) { if(length==1)printf(" %d\n", a[p1]); else printf(" %d,", a[p1]); a[p1] = -1; length--; } else { if(length==2)printf(" %d %d\n", a[p1], a[p2]); printf(" %d %d,", a[p1], a[p2]); a[p1] = -1; a[p2] = -1; length -= 2; } if (length == 0)break; start = counter_clockwise(p1,1); end = clockwise(p2,1); } scanf_s("%d %d %d", &N, &K, &M); } }
相关文章推荐
- Android“UI适配技能”
- LeetCode--No.225--Implement Stack using Queues
- sys_guid()
- uid
- /how-do-you-sort-a-dictionary-by-value
- HDU 4126 Genghis Khan the Conqueror(树形dp,MST,破坏原有最小生成树边后的最小生成树代价)
- HDU 1423 Greatest Common Increasing Subsequence(动态规划+最长公共上升子序列)
- Java学习日志(13-2-StringBuffer/StringBuilder与基本数值类型包装类)
- NSOperation与NSOperationQueue多线程的实现
- Unknown class _TtC20MainTabBarController20MainTabBarController in Interface Builder file.解决方法
- bigbluebutton的EC2安装方法
- UE4 行走/飞行切换,上升下降
- 探秘Java中String、StringBuilder以及StringBuffer
- setValuesForKeysWithDictionary 使用方法
- android 蓝牙各种UUID
- Access restriction required library rt.jar
- EasyUI的combobox用法
- UITableView初级使用与理解
- EasyUI的datebox用法
- java中的String、StringBuilder和StringBuffer的区别