#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)。
輸出 列印可以執行的最大可能運算元。
示例 input 3 8 12 40 output 2 input 4 5 6 8 10 output 0 這是一個叫做 Minimize Number 的問題可以編輯代碼并告訴我為什么在這些測驗用例中出錯
uj5u.com熱心網友回復:
首先,讓我們用文字寫下我們的演算法:
- 檢查當前元素。一開始,當前元素是第一個。
- 如果當前元素不能被 2 整除(即
x % 2 != 0),那么我們停止- 否則我們把它除以二
- 如果還有元素,我們去下一個元素,回到1)
- 否則,我們增加我們的計數器,因為所有元素都可以除以一,我們從前面開始
下一步是將其放入代碼中。
備注:不要使用 new int[n]; 對于動態陣列。使用 std::vector 代替。
#include <iostream>
#include <vector>
int main()
{
std::vector<int> numbers;
int n;
std::cout << "Enter number of elements:\n";
std::cin >> n;
std::cout << "n: " << n << "\n";
for( int i = 0; i < n; i )
{
std::cout << "Enter number:\n";
int temp;
std::cin >> temp;
numbers.push_back(temp);
}
int counter = 0;
while( true ) // infinite loop (for 5) )
{
for( int i = 0; i < n; i ) // 1) and 4)
{
if( numbers[i] % 2 != 0 ) // 2) if we can not divide the number by two, we stop
{
goto end_loop; // Rare usecase for goto
}
else // 3)
{
numbers[i] /= 2;
}
}
counter ; // also 5)
}
end_loop: // jump label for go_to
std::cout << "Maximum possible iterations: " << counter << "\n";
return EXIT_SUCCESS;
}
由于邁克爾在評論中正確指出,這段代碼沒有嚴格遵守規則,這里是版本,如果所有數字都是偶數,則只將數字相除:
#include <iostream>
#include <vector>
int main()
{
std::vector<int> numbers;
int n;
std::cout << "Enter number of elements:\n";
std::cin >> n;
std::cout << "n: " << n << "\n";
for( int i = 0; i < n; i )
{
std::cout << "Enter number:\n";
int temp;
std::cin >> temp;
numbers.push_back(temp);
}
int counter = 0;
bool all_even = true;
for(; all_even; counter )
{
for( int i = 0; i < n && all_even; i )
{
all_even &= (numbers[i] % 2) == 0;
}
for( int i = 0; i < n && all_even; i )
{
numbers[i] >>= 2;
}
}
std::cout << "Maximum possible iterations: " << counter << "\n";
return EXIT_SUCCESS;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/362046.html
