算法竞赛入门经典训练指南打卡
题目链接:UVa 11384
思路
对于1,,2,3,4,5,6.....n,最终的结果也就是要把所有的数变为0,即所有的数都相同
所以我们只需要每次操作让不同的数变少即可,一开始有n个数(不算0),最终要变为只有1个数
因为是递增,所以每次操作最多可以使一半的数变成相同的数
所以只需要判断什么时候n==1即可,此时除了0之外,只剩下一个数
将其变为0即可
注意:n指有多少个还剩多少个不同的数字,但是不包含0
主要是今天两道打卡题难度不高,没事做了,所以开始绕圈圈
代码如下:
#include <iostream>
using namespace std ;
int main(){
int n , ans ;
while (scanf("%d" , &n) != EOF){
ans = 1 ; //n为1的时候需要进行1次操作
while (n != 1){
ans ++ ; //操作次数+1
n /= 2 ; //操作一次后只有n/2个不同的数
}
cout << ans << endl ;
}
}