UVa 10633 - Rare Easy Problem

Contents

  1. 1. Problem
  2. 2. Solution
  3. 3. Code

Problem

題目網址
中文網址

Solution

1
2
3
N = 10M + k
X = N - M = 10M + k - M
M = (X - k) / 9

而能讓 X-k 被 9 整除的 k 可能不只一個,但由於 M 是 N 去掉一位數,所以 (N - k) / 10 後會剛好等於 M。
如此 k 便不能大於 9 ,否則會使 N 的十位數增加。
e.g.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
X = 27
M = (27 - k) / 9
N = 10M + k

k = 0
M = 3
N = 10 x 3 + 0

k = 9
M = 2
N = 10 x 2 + 9

k = 18
M = 1
N = 10 x 1 + 18 = 28
此時 N 的十位數就成為 2 了

Code

UVa 10633
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <cstdio>
typedef long long LL;

int main()
{
LL x;
while (scanf("%lld", &x) && x)
{
bool first = true;
for (int i = 9; i >= 0; --i)
if ((x - i) % 9 == 0)
{
if (!first)
putchar(' ');
printf("%lld", (LL)(x - i) / 9 * 10 + i);
first = false;
}
putchar('\n');
}

return 0;
}