列表

详情


NC219038. 消减整数

描述

给出一个正整数H,从1开始减,第一次必须减1,每次减的数字都必须和上一次相同或者是上一次的两倍,请问最少需要几次能把H恰好减到0。

输入描述

第一行给出一个正整数

接下来T行每行一个

输出描述

每行一个正整数代表最少的次数

示例1

输入:

3
3
5
7

输出:

2
3
3

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C(clang11) 解法, 执行用时: 2ms, 内存消耗: 232K, 提交时间: 2021-03-21 19:51:18

#include<stdio.h>
int main() {
	int t;
	scanf("%d",&t);
	while(t--) {
		int h,a=0;
		scanf("%d",&h);
		while(h) {
			if(h&1)h>>=1;
			else h--;
			a++;
		}
		printf("%d\n",a);
	}
}

Python3 解法, 执行用时: 58ms, 内存消耗: 4564K, 提交时间: 2022-03-23 13:57:26

t=int(input())
for i in range(t):
    n=int(input())
    j,res=1,0
    while n>0:
        n-=j
        res+=1
        if n%(2*j)==0 and n>=(2*j):
            j*=2
    print(res)

C++(clang++11) 解法, 执行用时: 6ms, 内存消耗: 360K, 提交时间: 2021-03-22 13:57:53

#include<iostream>
int main(){int t,h;std::cin>>t;while(t--){int a=0;std::cin>>h;while(h){h&1?h/=2:h--;a++;}std::cout<<a<<'\n';}}

上一题