【提高组】【4.16/17每日一题】——Getting Zero

简介: 【提高组】【4.16/17每日一题】——Getting Zero

☘前言☘

今日份水题开始。希望有想要提高的同学跟我们一起来刷题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++的特性。

43842d9715d0e508f9a0a6559fed7f3.png

复杂度可以啦!


相关文章
|
1月前
|
人工智能 C++
第十四届蓝桥杯省赛大学B组(C/C++)整数删除
第十四届蓝桥杯省赛大学B组(C/C++)整数删除
|
6月前
|
算法
LeetCode刷题---简单组(三)
LeetCode刷题---简单组(三)
LeetCode刷题---简单组(三)
|
6月前
|
算法 Python
LeetCode刷题---简单组(六)
LeetCode刷题---简单组(六)
|
6月前
|
测试技术
蓝桥杯 2020 第一轮省赛 A 组 F 题(B 组 G 题)解码
蓝桥杯 2020 第一轮省赛 A 组 F 题(B 组 G 题)解码
56 0
|
6月前
|
存储 Python
LeetCode刷题---简单组(二)
LeetCode刷题---简单组(二)
LeetCode刷题---简单组(二)
|
6月前
|
算法 索引
LeetCode刷题---简单组(四)
LeetCode刷题---简单组(四)
LeetCode刷题---简单组(四)
|
6月前
|
存储
LeetCode刷题---简单组(五)
LeetCode刷题---简单组(五)
LeetCode刷题---简单组(五)
|
存储 数据安全/隐私保护
[网鼎杯 2020 青龙组]jocker 题解
[网鼎杯 2020 青龙组]jocker 题解
105 0
|
算法
2018 蓝桥杯省赛 B 组模拟赛(一)
2018 蓝桥杯省赛 B 组模拟赛(一)