思路:只需要遍历一遍数组,去判断当前这个数和下一个数的商是不是大于2即可,若大于2,则需要贪心去每次增加一个两个数中较小的数的乘2,的数,然后用新数和较大的那个数在看商是不是大于2,直到小于2,停止循环。
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=55;
int T;
int n;
int a[N];
signed main()
{
cin>>T;
while(T--)
{
scanf("%d", &n);
for(int i=0;i<n;i++) scanf("%d", &a[i]);
int res=0;//统计个数
for(int i=0;i<n;i++)
if(i!=n-1)
{
int l=min(a[i], a[i+1]), r=max(a[i], a[i+1]);
//找到所比较的两个数谁大谁小。
if(1.0*r/l<=2.0) continue;//如果商满足,跳过
while(1.0*r/l>2.0) res++, l*=2;//不满足,一直添加心数,直到满足题意
}
printf("%d\n", res);
}
}