蓝桥打卡-end

凑数

初始时,n=0n=0。

每一轮操作都要依次完成两个步骤:

  • 第一步,任选一个非负整数 a,将 n 增加 a,这一步所需付出的代价为 a。
  • 第二步,将 n 乘以 2,这一步无需付出任何代价。

你可以不断重复上述操作。

给定一个整数 x,你的任务是使 n 在某一步操作后(不一定是某一轮结束后)恰好等于 xx 且付出的总代价尽可能少。

请你计算,为了完成任务所需付出的最小总代价。

例如,如果 x=5,则最佳操作方案为:

  • 第 1轮操作中,第一步,将 n 增加 1(付出代价 1),使得 n 变为 1,第二步,将 n 乘以 2,使得 n 变为 2。
  • 第 2 轮操作中,第一步,将 n 增加 0(付出代价 0),则 n 仍然为 2,第二步,将 n 乘以 2,使得 n 变为 44。
  • 第 3 轮操作中,第一步,将 n 增加 1(付出代价 1),使得 n 变为 5。此时 n 等于 x 成立,任务完成。
  • 付出的最小总代价为 2。

再例如,如果 x=8x=8,则最佳操作方案为:

  • 第 1 轮操作中,第一步,将 n 增加 1(付出代价 1),使得 nn 变为 1,第二步,将 n 乘以 2,使得 n 变为 2。
  • 第 2 轮操作中,第一步,将 n 增加 0(付出代价 0),则 nn 仍然为 2,第二步,将 n 乘以 2,使得 n 变为 4。
  • 第 3 轮操作中,第一步,将 n 增加 0(付出代价 0),则 nn 仍然为 4,第二步,将 n 乘以 2,使得 n 变为 8。此时 n 等于 x 成立,任务完成。
  • 付出的最小总代价为 1。

输入格式

一个整数 x。

输出格式

一个整数,表示所需付出的最小总代价。

数据范围

前 3 个测试点满足 1≤x≤10。
所有测试点满足 1≤x≤10⑨

import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        long x = sc.nextLong();
        int ans = 0;
        while(x>0){
            ans += x % 2;
            x /= 2;
        }
        System.out.println(ans);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

续写少年!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值