数组变换(编程题)

来源:互联网 发布:领航时时彩二星软件 编辑:程序博客网 时间:2024/05/08 03:54

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

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


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

输入例子:
21 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,不是返回1int 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");}



原创粉丝点击