IT评测·应用市场-qidao123.com

标题: HDU1032——The 3n + 1 problem,HDU1033——Edge,HDU1034——Candy Shari [打印本页]

作者: 宁睿    时间: 2024-7-27 02:10
标题: HDU1032——The 3n + 1 problem,HDU1033——Edge,HDU1034——Candy Shari
目次
HDU1032——The 3n + 1 problem
标题描述
运行代码
代码思路
HDU1033——Edge
标题描述
运行代码
代码思路
HDU1034——Candy Sharing Game
标题描述
运行代码
代码思路

HDU1032——The 3n + 1 problem

标题描述

Problem - 1032

运行代码

  1. #include <iostream>
  2. using namespace std;
  3. int main() {
  4.     int i, j, t, k;
  5.     while (cin >> i >> j) {
  6.         int u = i;
  7.         int o = j;
  8.         int max = 0;
  9.         if (i > j) {
  10.             t = i;
  11.             i = j;
  12.             j = t;
  13.         }
  14.         for (k = i; k <= j; k++) {  // 从 i 到 j 寻找最大循环次数
  15.             int p = k;
  16.             int cn = 0;
  17.             while (p != 1) {
  18.                 if (p % 2 != 0)
  19.                     p = 3 * p + 1;
  20.                 else
  21.                     p = p / 2;
  22.                 cn++;  // cn 记录每个数变成 1 所需要的最大循环次数
  23.             }
  24.             if (max < cn)
  25.                 max = cn;
  26.         }
  27.         cout << u << " " << o << " " << max + 1 << endl;
  28.     }
  29.     return 0;
  30. }
复制代码
代码思路

HDU1033——Edge

标题描述

Problem - 1033

运行代码

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. const int L = 0, R = 1, U = 2, D = 3;  // 代表左右上下 4 方向
  5. int dir_A[] = { U, D, R, L };  // 执行 A 右转操作时 4 个方向变为对应的 UDRL 方向
  6. int dir_V[] = { D, U, L, R };  // 执行 V 左转操作时 4 个方向变为对应的 DULR 方向
  7. int dx[] = { -10, 10, 0, 0 };  // 左右上下 4 方向对应的 X 坐标增量
  8. int dy[] = { 0, 0, 10, -10 };  // y 增量
  9. void Edge(const string& com) {
  10.     cout << "300 420 moveto" << endl;
  11.     cout << "310 420 lineto" << endl;
  12.     int x = 310, y = 420;  // 初始的坐标
  13.     int cur_dir = R;  // 初始的方向始终向右
  14.     for (char c : com) {  // 遍历命令
  15.         int new_dir;  // 新的方向
  16.         if (c == 'A') {
  17.             new_dir = dir_A[cur_dir];
  18.             x += dx[new_dir];  // 新方向 X 增量
  19.             y += dy[new_dir];  // 新方向 Y 增量
  20.         }
  21.         else {
  22.             new_dir = dir_V[cur_dir];
  23.             x += dx[new_dir];
  24.             y += dy[new_dir];
  25.         }
  26.         cur_dir = new_dir;  // 更新当前方向
  27.         cout << x << " " << y << " lineto" << endl;
  28.     }
  29.     cout << "stroke" << endl;
  30.    cout << "showpage" << endl;
  31. }
  32. int main() {
  33.     string com;
  34.     while (cin >> com) {
  35.         Edge(com);
  36.     }
  37.     return 0;
  38. }
复制代码
代码思路


HDU1034——Candy Sharing Game

标题描述

Problem - 1034

运行代码

  1. #include <iostream>
  2. #include <cstdio>
  3. #define N 100
  4. using namespace std;
  5. int main() {
  6.     int s[N], n, i, k, t, p;
  7.     while (scanf_s("%d", &n) == 1 && n) {
  8.         for (i = 0; i < n; i++)
  9.             scanf_s("%d", s + i);
  10.         for (k = 1; ; k++) {
  11.             t = s[n - 1] / 2;  // 首先处理边界条件,存取最后一个人糖果数的一半
  12.             for (i = 0; i < n; i++) {
  13.                 p = s[i] / 2;  // 存取当前糖果数的一半用来给右边的同学
  14.                 s[i] = s[i] / 2 + t;  // 自己减一半再加上左边同学给的一半
  15.                 t = p;  // 给完一个同学换下一个
  16.                 if (s[i] % 2 != 0)  // 当前处理完如果为奇数,收老师一个
  17.                     s[i]++;
  18.             }
  19.             t = s[0];
  20.             bool isSame = true;  // 增加一个标志变量来判断是否每个同学糖果数相同
  21.             for (i = 1; i < n; i++) {
  22.                 if (s[0] != s[i]) {
  23.                     isSame = false;
  24.                     break;
  25.                 }
  26.             }
  27.             if (isSame) {
  28.                 break;
  29.             }
  30.         }
  31.         printf("%d %d\n", k, t);  // 输出游戏次数和每个人最终的糖果数
  32.     }
  33.     return 0;
  34. }
复制代码
代码思路


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4