UVa 133 The Dole Queue

14480 단어 Queue
제목 대의:
N 명을 시계 반대 방향으로 둘러싸다.
관원이 두 명 있다
한 사람이 시계 반대 방향에서 k개를 세다
다른 하나는 n에서 m 개로.
#을 동시에 진행하고 세어진 열을 낸다.(한 번에 하나 또는 두 개 나열)
다 셀 때까지.
코드는 다음과 같습니다.

   
     
  1. #include<iostream>
  2. #include<cstdio>
  3. using namespace std;
  4. int main () {
  5. int n, k, m;//n,k m
  6. while (scanf("%d%d%d", &n, &k, &m) == 3 && (n || k || m)) {
  7. int num[20] = {0};
  8. for (int i = 0; i != n; ++i) {
  9. num[i] = i + 1;
  10. }
  11. int pop(0);
  12. int idx1(0), idx2(n - 1);
  13. while (pop != n) {
  14. if (pop) printf(",");
  15. for (int i = idx1, cnt = 0; cnt != k; ++i) {
  16. if (num[i]) {
  17. if (++cnt == k) idx1 = i;
  18. }
  19. if (i == n - 1) i = -1;
  20. }
  21. for (int i = idx2, cnt = 0; cnt != m; --i) {
  22. if (num[i]) {
  23. if (++cnt == m) idx2 = i;
  24. }
  25. if (!i) i = n;
  26. }
  27. if (idx1 == idx2) {
  28. ++pop;
  29. printf("%3d", num[idx1]);
  30. num[idx1] = 0;
  31. }else {
  32. pop += 2;
  33. printf("%3d%3d", num[idx1], num[idx2]);
  34. num[idx1] = 0;
  35. num[idx2] = 0;
  36. }
  37. }
  38. printf("
    "
    );
  39. }
  40. return 0;
  41. }



Wiz


좋은 웹페이지 즐겨찾기