暴力枚举:数组变换

0x00 题目

有一个数组,里面的数可能不相等,现在他想把数组所有的数都变为相等的数,问是否可行。

可以进行的操作是:将数组中的任意一个数改为这个数的两倍。这个操作的使用次数不限,也可以不使用,并且可以对同一个位置使用多次。

输入描述

输入一个正整数 N (N <= 50) 接下来一行输入 N 个正整数,每个数均小于等于 1 e9.

输出描述

假如经过若干次操作可以使得 N 个数都相等,那么输出"YES", 否则输出"NO"

测试用例

输入

2 1 2

输出

YES

0x01 题解

题目很好理解,判断他们的除 2 之外有没有相同的公约数,那么我们就可以把数组每一个元素都除以 2,直到它为奇数。

如果此时数组每个元素都一样,则满足条件,即有除 2 之外有相同的公约数。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
num_inputs = int(input())
matrix = input()
matrix = matrix.split(' ')

flag = False
first = 0

for i in range(num_inputs):
    tmp = int(matrix[i])

    while tmp % 2 == 0:
        tmp /= 2

    if i == 0:
        first = tmp

    if tmp != first:
        flag = True
        break

if flag:
    print('NO')
else:
    print('YES')

0x02 Reference

数组变换 - 牛客网

使用 Hugo 构建
主题 StackJimmy 设计