1 条题解
-
1
题意:
给定个砝码,重量分别为。给定一个物品,质量为,放在天平左盘。左右皆可放砝码,如何放能使天平平衡。
思路:
将物品的重量转化为三进制,如果某一位为或者则不需处理、为便在此位加上相应的的幂将消除,并进位。最终得到的每位都为或者的数即为最终天平右端的重量。
标程
#include <stdio.h> #include <string.h> #include <math.h> #define N 25 int n, T; int num[N], res[N]; void print(int s[N], int len) { int i, flag = 0; for (i = 0; i <= len; i++) { if (!flag && s[i]) { printf("%d", (int)pow(3, i)); flag = 1; } else if (s[i]) { printf(",%d", (int)pow(3, i)); } } if (!flag) { printf("empty"); } } int main() { int i, len; scanf("%d", &T); while (T--) { len = 0; memset(num, 0, sizeof(num)); memset(res, 0, sizeof(res)); scanf("%d", &n); while (n) { // 将输入数字转化为 3 进制 num[len++] = n % 3; n /= 3; } for (i = 0; i < len; i++) { if (num[i] >= 2) { // 出现 2(或 3) if (num[i] == 2) { // 此位为 2 表示在这位上加上一个相应的 3 的幂 res[i] = 1; } num[i] = 0; num[i + 1]++; } } print(res, len); printf(" "); print(num, len); // num 数组恰为最终天平两端的重量 putchar('\n'); } return 0; }
- 1
信息
- ID
- 703
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 6
- 已通过
- 1
- 上传者