0x00 题目

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

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

输入描述

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

输出描述

假如经过若干次操作可以使得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

数组变换 - 牛客网