数组变换(编程题)

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

输入描述:
输入一个正整数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");
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值