2021 年 9 月青少年软编等考 C 语言五级真题解析

news/2025/2/8 20:44:46 标签: c语言, 开发语言, c++, 算法, 青少年编程, 学习, 题解

目录

  • T1. 问题求解
    • 思路分析
  • T2. 抓牛
    • 思路分析
  • T3. 交易市场
    • 思路分析
  • T4. 泳池
    • 思路分析

T1. 问题求解

给定一个正整数 N N N,求最小的 M M M 满足比 N N N 大且 M M M N N N 的二进制表示中有相同数目的 1 1 1

举个例子,假如给定 N N N 78 78 78,二进制表示为 100   1110 100\ 1110 100 1110,包含 4 4 4 1 1 1,那么最小的比 N N N 大的并且二进制表示中只包含 4 4 4 1 1 1 的数是 83 83 83,其二进制是 101   0011 101\ 0011 101 0011,因此 83 83 83 就是答案。

时间限制:1 s
内存限制:64 MB

  • 输入
    输入若干行,每行一个数 N   ( 1 ≤ N ≤ 1 0 6 ) N\ (1 ≤ N ≤ 10^6) N (1N106),如果这行为 0 0 0 表示输入结束。
  • 输出
    对于每个 N N N,输出对应的 M M M
  • 样例输入
    1
    2
    3
    4
    78
    0
    
  • 样例输出
    2
    4
    5
    8
    83
    

思路分析

此题考查枚举算法与数位分离,属于入门题。

首先计算出 n n n 的二进制形式中 1 1 1 的个数。然后从 n + 1 n+1 n+1 开始依次枚举,寻找与 n n n 的二进制形式中 1 1 1 的个数相等的第一个数字即可。

/*
 * Name: T1_1.cpp
 * Problem: 问题求解
 * Author: Teacher Gao.
 * Date&Time: 2025/01/08 23:50
 */

#include <iostream>

using namespace std;

int main()
{
   
    ios::sync_with_stdio(false);
    cin.tie(0);

    int n;
    while (cin >> n && n) {
   
        int p = n, cnt = 0;
        while (p) {
   
            p &= p - 1;
            cnt++;
        }
        while (1) {
   
            p = ++n;
            int cnt2 = 0;
            while (p) {
   
                p &= p - 1;
                cnt2++;
            }
            if (cnt2 == cnt) {
   
                cout << n << "\n";
                break;
            }
        }
    }

    return 0;
}

从二进制的角度考虑,要保证比 n n n 大,且二进制形式中 1 1 1 的数量不变,相当于让某一个 1 1 1 向左移动一位。容易想到向左移动的这个 1 1 1 的左边必须是 0 0 0,那么我们可以从最低位 1 1 1 开始向左寻找,当发现某一位是 0 0 0 的时候,将它右边那个 1 1 1 移动过来即可。但是这样仍然不是最小的,我们需要将这一位右边的 1 1 1 全都移动到最低位才能满足最小。观察示例中 78 78 78 83 83 83 的二进制形式,可以更好地理解这一点。

最优策略既然已经分析出来了,那么只要找到那个合适的 1 1 1,答案便是固定的。首先通过 n & -n 可以求出 n n n最低位 1 1 1 的位权,从这一位开始向左寻找第一位 0 0 0,同时统计 1 1


http://www.niftyadmin.cn/n/5845268.html

相关文章

蓝桥杯小白打卡第四天

1221. 四平方和 问题描述 四平方和定理&#xff0c;又称为拉格朗日定理&#xff1a;每个正整数都可以表示为至多 4 个正整数的平方和。如果把 0 包括进去&#xff0c;就正好可以表示为 4 个数的平方和。 例如&#xff1a; (5 0^2 0^2 1^2 2^2)(7 1^2 1^2 1^2 2^2) …

WPF点击提交按钮后验证

1.定义ValidateModelBase 基类&#xff0c;实现IDataErrorInfo接口来触发验证信息&#xff0c; using System.ComponentModel; using System.ComponentModel.DataAnnotations; using CommunityToolkit.Mvvm.ComponentModel;/// <summary>/// 验证模型基类/// </summa…

降低获客与裂变渠道成本的新策略:融合开源2+1链动模式、AI智能名片与S2B2C商城小程序

摘要&#xff1a;在数字化时代&#xff0c;企业面临着日益增长的获客与裂变渠道成本挑战。本文提出了一种创新的策略&#xff0c;即通过融合开源21链动模式、AI智能名片以及S2B2C商城小程序&#xff0c;借助用户自身的社交网络&#xff0c;实现高效、低成本的获客拉新与裂变流量…

详细教程 | 如何使用DolphinScheduler调度Flink实时任务

Apache DolphinScheduler 非常适用于实时数据处理场景&#xff0c;尤其是与 Apache Flink 的集成。DolphinScheduler 提供了丰富的功能&#xff0c;包括任务依赖管理、动态调度、实时监控和日志管理&#xff0c;能够有效简化 Flink 实时任务的管理和部署。通过 DolphinSchedule…

C# Mutex 锁 使用详解

总目录 前言 在C#中&#xff0c;Mutex&#xff08;互斥锁&#xff09;是一种跨进程的同步机制&#xff0c;用于控制多个线程或进程对共享资源的访问。与 Monitor 和 lock 不同&#xff0c;Mutex 可以跨越进程边界进行同步&#xff0c;这使得它非常适合需要跨进程同步的场景。本…

MES系统对于中小型制造企业有什么价值?

由于近几年来我国制造业的飞速发展&#xff0c;催生出了很多为大企业代工或细分制造领域的中小型企业。这些中小型企业通常在初期因生产规模和资本的积累十分有限&#xff0c;所以在信息化投入方面较少。随着企业的发展需求&#xff0c;为应对多品种、小批量的制造模式在生产、…

1.1 画质算法的主要任务

文章目录 画质算法及分类画质问题的核心&#xff1a;退化 画质算法及分类 图像画质算法是指&#xff0c;处理图像或视频数字信号&#xff0c;以提高其视觉质量、人眼感官的算法。图像画质算法可分为&#xff1a;去噪&#xff08;Denoising), 超分辨率&#xff08;Super-Resolut…

消息队列高手课总结笔记——基础篇速通

第一章&#xff0c;整体认识 一&#xff0c;解决的问题&#xff08;使用场景&#xff09; 主要&#xff1a; 1&#xff0c;异步处理 2&#xff0c;流量控制 3&#xff0c;服务解耦 补充&#xff1a; 1&#xff0c;作为发布/订阅系统实现一个微服务级系统间的观察者模式&#…