数组变换--全国模拟

Posted qqky

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组变换--全国模拟相关的知识,希望对你有一定的参考价值。

[编程题] 数组变换
时间限制:1秒
空间限制:32768K
牛牛有一个数组,里面的数可能不相等,现在他想把数组变为:所有的数都相等。问是否可行。
牛牛可以进行的操作是:将数组中的任意一个数改为这个数的两倍。
这个操作的使用次数不限,也可以不使用,并且可以对同一个位置使用多次。
 
输入描述:
输入一个正整数N (N <= 50) 接下来一行输入N个正整数,每个数均小于等于1e9.
 
 
输出描述:
假如经过若干次操作可以使得N个数都相等,那么输出"YES", 否则输出"NO"
 
输入例子:
2 1 2
 
输出例子:
YES
 
解题思路:题目中是将数组中数改为这个数的2倍(可多次),然后让数组中所有数都相等,因此想到将数组排序,然后使得每个数改变后与最大数比较,应都等于最大数才符合条件。
1)将数组排序
2)遍历整个数组,若该位每次扩大为其本身的2倍后等于数组中最大数,则符合条件count++
3)比较count与数组中数目是否相同,相同返回真,否则返回假
 1 #include <iostream>
 2 #include <algorithm>
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     int n;
 8     while(cin>>n)
 9     {
10         int count=0;
11         int a[n];
12         for(int i=0;i<n;i++)
13         {
14             cin>>a[i];
15         }
16 
17         sort(a,a+n);
18         for(int i=0;i<n;i++)
19         {
20             int j = a[i];
21             for(;j<a[n-1];)
22             {
23                 j *= 2;
24             }
25             if(j == a[n-1])
26             {
27                 count++;
28             }
29         }
30         if(count == n)
31         {
32             cout<<"YES"<<endl;
33         }
34         else
35         {
36             cout<<"NO"<<endl;
37         }
38     }
39     return 0;
40 }

 

以上是关于数组变换--全国模拟的主要内容,如果未能解决你的问题,请参考以下文章

2017年校招全国统一模拟笔试(第三场)编程题集合--Python

2017年校招全国统一模拟笔试(第三场)编程题集合--Python

LeetCode 6. Z 字形变换

排序子序列--全国模拟

2021年全国大学生电子设计大赛题目

控制遍历方向模拟题--Z字形变换