数组变换

来源:互联网 发布:登陆火星知乎 编辑:程序博客网 时间:2024/05/21 22:00

牛牛有一个数组,里面的数可能不相等,现在他想把数组变为:所有的数都相等。问是否可行。
牛牛可以进行的操作是:将数组中的任意一个数改为这个数的两倍。
这个操作的使用次数不限,也可以不使用,并且可以对同一个位置使用多次。

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

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

输入例子:
2
1 2

输出例子:
YES


代码(90%,可能是Java用大数类超时了):

/* * 对于每个数一直除2,直到数的最后一位为1。 */import java.util.Scanner;public class Main {    public static void main(String[] args) {        // TODO Auto-generated method stub        Scanner in = new Scanner(System.in);        int N = in.nextInt();        int[] num = new int[N];        for (int i = 0 ; i < N ; i++){            num[i] = in.nextInt();        }        for( int i = 0 ; i < N ; i++){            while((num[i] & 1) == 0){                num[i] >>= 1;            }        }        StringBuffer result = new StringBuffer("YES");        for ( int i = 1 ; i < N ; i++){            if ( num[i] != num[0]){                int len = result.length();                result.delete(0,len);                result.append("NO");            }        }        System.out.print(result);        in.close();    }}
原创粉丝点击