☘前言☘
今日份水题开始。希望有想要提高的同学跟我们一起来刷题0.0
4.16/17每日一题——Getting Zero
🧑🏻作者简介:一个从工业设计改行学嵌入式的年轻人
✨联系方式:2201891280(QQ)
⏳全文大约阅读时间: 20min
解题思路
这个题目的关键在于需要取余的是
32768
也就是 2 15 2^{15} 215,所以说最多乘15
次必然能得到0。然后考虑+1,直接暴力枚举1-15
吧 加1 然后看下最低位的1在哪里,比如在第二位 ( 100000010 ) 2 (100000010)_2 (100000010)2,那么需要的总次数就是 16 - 2 + 1(加了1)。反正都是常数复杂度。看代码:
#include <cstdio>
int main(){
int n,x;
scanf("%d",&n);
while(n--){
scanf("%d", &x);
if(x == 0) {printf("%d ",0);continue;}
int ans = 15;
for(int i = 0;i < 15;++i){
int tmp1 = x + i, count = 0, tmp = tmp1 & (-tmp1);//tmp为 tmp最低位1
while(tmp) tmp >>= 1, ++count; //看看最低位1在第几位
tmp = 16 - count + i;
ans = ans > tmp ? tmp : ans;
}
printf("%d ", ans);
}
return 0;
}
头文件换成.h
的话直接c提交也可以哟,反正我是没用啥c++的特性。
复杂度可以啦!
📑写在最后
今天就这样,明日再见0.0