题解 AT3718 【Shift only】

· · 题解

一道简单的题目,代码如下:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,i,sum=0,j;
    cin>>n;
    int a[n+1];
    for (i=1;i<=n;i++) cin>>a[i];
    for (;;)
    {
        int flag=0;//flag是用来判断是不是数组里全部的数都是偶数,每次弄完都要归0
        for (i=1;i<=n;i++)
        if (a[i]%2!=0) 
        { flag=1; break; }//只要有一个是奇数,flag更新为1,直接退出循环,免得耗时
        if (flag==1) break;//有奇数存在,整段垮掉
        if (flag==0) 
        {
            sum++;//次数+1
            for (i=1;i<=n;i++)
            a[i]/=2;//记得把数组里全部的数都除2
        }
    }
    cout<<sum<<endl;//输出总次数
    return 0;//好习惯
}