【发布时间】:2021-12-31 09:21:25
【问题描述】:
#include<iostream>
using namespace std;
int main ()
{
int counter=0;
int num;
cin>>num;
int *arr=new int [num];
for(int x=0;x<num;x++)
{
cin>>arr[x];
}//[12,12]
for(int x=0;x<num;x++)
{
/*
first
****************************
12/2=6
12/2=6
counter=1
counter=2
last value
counter=2/2=1
x=0
second
****************************
6/2=3
6/2=3
counter=1+1+1(last value from first operation)3
****************************
another test with input [200,200]
first case
200/2=100
200/2=100
check=2
2==2
then
startover x=0
counter=counter/2
then counter = 1
-----------
100/2==50
100/2=50
check=2
2==2
then startover
*/
if(arr[x]%2==0)
{
arr[x]=arr[x]/2;
++counter;
}
if(counter==num)//true 2==2
{
x=0;
counter=counter/num;//2/2
}
if(arr[x]%2!=0)
break;
}
cout<<counter<<endl;
return 0;
}
给定一个数字 N 和一个包含 N 个正数的数组 A。打印可以执行的最大可能操作。
操作如下:如果所有数字都是偶数,则将每个数除以2,否则不能再进行任何操作。
输入 第一行包含 N (1 ≤ N ≤ 200) 个元素。
第二行包含 N 个数字(1 ≤ Ai ≤ 109)。
输出 打印可以执行的最大可能操作数。
示例 输入 3 8 12 40 输出 2 输入 4 5 6 8 10 输出 0 这是一个叫做最小化数字的问题我写这个代码但是在某些测试用例中我得到错误例如当输入 200 200 我得到输出 2 当它应该是三个时可以编辑代码并告诉我为什么它在这些测试用例中出错
【问题讨论】:
-
为什么只分2次?
-
您需要嵌套循环。每当数组中无事可做时,外部的就应该停止。内部的:一个检查 all 项是否为偶数,另一个检查是否为 2 if 所有项都是偶数。计算你划分所有项目的次数,如果该次数为 0,则退出外循环。
-
@Breakingnotsobad 为什么要嵌套循环?这不是 0(N*N) 问题。首先检查所有数字是否为偶数,如果是,则将所有数字除以 2。
-
counter=counter/num;的目的是什么? -
@Breakingnotsobad “如果所有数字都是偶数,则将它们除以 2....” 意味着您必须检查所有数字,然后有条件地采取行动。对不起,但我认为就像工业嵌入式系统工程师一样.在要求中遗漏“小”“无关紧要”的细节有时会导致事故。