牛牛有一个数组,里面的数可能不相等,现在他想把数组变为:所有的数都相等。问是否可行。
牛牛可以进行的操作是:将数组中的任意一个数改为这个数的两倍。
这个操作的使用次数不限,也可以不使用,并且可以对同一个位置使用多次。
输入描述:
输入一个正整数N (N <= 50) 接下来一行输入N个正整数,每个数均小于等于1e9.
输出描述:
假如经过若干次操作可以使得N个数都相等,那么输出"YES", 否则输出"NO"
输入例子:
2 1 2
输出例子:
YES
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#define MAXLINE 1000000000
//交换
void swap(int *p, int *t){
int temp;
temp = *p;
*p = *t;
*t = temp;
}
//判断是否是为2的n次幂,如果是返回0,不是返回1
int issquare(int a, int b){
int c;
if (a < b)
swap(&a, &b);
c = a/b;
if(a == b * c){ //判断a/b是否是整数,其中a>b
return (a/b-1)&(a/b);
}
else
return 1;
}
//读取正整数
int innum(void){
int c, num, i;
num = i = 0;
while(isdigit(c=getchar()) && num <= MAXLINE)
num = num * 10 + (c - '0');
return num;
}
int main()
{
int n, i=0;
n = innum();
int num[n];
if(n>0 && n<=50){
while(i < n){
num[i] = innum();
i++;
}
for(i=0; i<n-1; i++)
if (issquare(num[i], num[i+1])){
printf("NO\n");
break;
}
else if (i == n-2)
printf("YES\n");
}
else
printf("'n' is out of the range.\n");
}