☘前言☘
今日份水题开始。希望有想要提高的同学跟我们一起来刷题0.0
4.16/17每日一题——Getting Zero
🧑🏻作者简介:一个从工业设计改行学嵌入式的年轻人
✨联系方式:2201891280(QQ)
⏳全文大约阅读时间: 20min
全文目录
☘前言☘
解题思路
📑写在最后
B. Getting Zero
解题思路
这个题目的关键在于需要取余的是32768也就是2 15 2^{15}2
15
,所以说最多乘15次必然能得到0。然后考虑+1,直接暴力枚举1-15吧 加1 然后看下最低位的1在哪里,比如在第二位( 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++的特性。
复杂度可以啦!