原题
题意
给一个长度为n的数组,其中a[i]和a[i + 1]满足:
且可以向其中加入任意数,问最少加入几个数,可令任意a[i]和a[i + 1]满足上述公式
思路
max和min只可能是a[i]或a[i + 1],因此仅需遍历数组,查看是否max/min <= 2.0(因为不一定是整除,所以用2.0),不是的话,若a[i] 小于a[i + 1],则添加2 * a[i],反之,添加2 * a[i + 1] ;(其实可以直接添加min * 2,反正要小的;且添加并非真的添加的数组,而是已max和min *2,继续运算 )。
AC代码
#include<iostream>
#include<algorithm>
using namespace std ;
int main()
{
int t ;
cin >> t ;
while( t -- )
{
int n , a[100] , aum = 0 ;
cin >> n ;
for( int i = 0 ; i < n ; i ++ )
cin >> a[i] ;
for( int i = 0 ; i < n ; i ++ )
{
if( i == n - 1)
break ;
int Max = max( a[i] , a[i + 1] ) ;
int Min = min( a[i] , a[i + 1] ) ;
if( 1.0 * Max / Min <= 2.0 )
continue ;
while( 1.0 * Max / Min > 2.0 )
{
aum ++ ;
Min *= 2 ;
}
}
cout << aum << endl ;
}
return 0 ;
}