当前位置: 首页 > article >正文

蓝桥杯历届真题 # 数字诗意(C++,Java)

文章目录

  • 题目解读
  • [蓝桥杯 2024 省 C] 数字诗意
    • 题目描述
    • 输入格式
    • 输出格式
    • 样例 #1
      • 样例输入 #1
      • 样例输出 #1
    • 提示
  • 思路
  • 完整代码


题目解读

原题链接

[蓝桥杯 2024 省 C] 数字诗意

题目描述

在诗人的眼中,数字是生活的韵律,也是诗意的表达。

小蓝,当代顶级诗人与数学家,被赋予了“数学诗人” 的美誉。他擅长将冰冷的数字与抽象的诗意相融合,并用优雅的文字将数学之美展现于纸上。

某日,小蓝静坐书桌前,目光所及,展现着 n n n 个数字,它们依次为 a 1 , a 2 , ⋯   , a n a_1, a_2, \cdots, a_n a1,a2,,an,熠熠生辉。小蓝悟到,如果一个数能够以若干个(至少两个)连续的正整数相加表示,那么它就蕴含诗意。例如,数字 6 6 6 就蕴含诗意,因为
它可以表示为 1 + 2 + 3 1 + 2 + 3 1+2+3。而 8 8 8 则缺乏诗意,因为它无法用连续的正整数相加表示。

小蓝希望他面前的所有数字都蕴含诗意,为此,他决定从这 n n n 个数字中删除一部分。请问,小蓝需要删除多少个数字,才能使剩下的数字全部蕴含诗意?

输入格式

输入的第一行包含一个整数 n n n,表示展示的数字个数。

第二行包含 n n n 个整数 a 1 , a 2 , ⋯   , a n a_1, a_2, \cdots, a_n a1,a2,,an,相邻整数之间使用一个空格分隔,表示展示的数字。

输出格式

输出一行包含一个整数,表示小蓝需要删除的数字个数,以使剩下的数字全部蕴含诗意。

样例 #1

样例输入 #1

3
3 6 8

样例输出 #1

1

提示

【样例说明】

在样例中,数字 3 3 3 可以表示为 1 + 2 1 + 2 1+2,数字 6 6 6 可以表示为 1 + 2 + 3 1 + 2 + 3 1+2+3,数字 8 8 8 无法表示为连续的正整数相加,因此,需要删除的数字个数为 1 1 1

【评测用例规模与约定】

对于 30 % 30\% 30% 的评测用例, 1 ≤ n ≤ 1 0 3 1 \le n \le 10^3 1n103 1 ≤ a i ≤ 1 0 3 1 \le a_i \le 10^3 1ai103
对于所有评测用例, 1 ≤ n ≤ 2 × 1 0 5 1 \le n \le 2 \times 10^5 1n2×105 1 ≤ a i ≤ 1 0 16 1 \le a_i \le 10^{16} 1ai1016

思路

观察管理发现,只有2的次方不满足要求
转化为二进制表示,该数字中只有1个1的数字不满足要求
因此题目转化为把数字转为二进制后求起1的个数
若1的个数为1那么就不满足要求

完整代码

#include<bits/stdc++.h>

using namespace std;

//num的二进制表示中若只有1个1,那么肯定是2的次方
bool check(long long num){
    int cnt=0;
    while(num){
        int left=num%2;
        if(left)cnt++;
        num/=2;
    }
    if(cnt==1)return true;
    else return false;
}

int main(){
    int res=0;
    int n;
    cin>>n;
    while(n--){
        long long num;
        cin>>num;
        if(check(num))res++;
    }
    
    cout<<res;
}
import java.util.Scanner;

class Main{
    static Scanner sc =new Scanner(System.in);
    static int res;
    public static void main(String[] args) {
        int n=sc.nextInt();

        while(n-->0){
            long num=sc.nextLong();
            if(check(num))res++;
        }

        System.out.println(res);
    }

    static boolean check(long num){
        int cnt=0;
        while(num>0){
            long left=num%2;
            if(left>0)cnt++;
            num/=2;
        }
        if(cnt==1)return true;
        else return false;
    }
}

🌻编写本篇文章目的是笔者想以输出的形式进行学习,顺便记录学习点滴🌻

🌹 如果本篇文章对你有帮助的话那就点个赞吧👍🌹

😇 本篇文章可能存在多处不足,如有修改意见,可以私信或者评论我哦 😇


在这里插入图片描述


http://www.kler.cn/a/502208.html

相关文章:

  • type 属性的用途和实现方式(图标,表单,数据可视化,自定义组件)
  • 分多个AndroidManifest.xml来控制项目编译
  • RK3568-rk809rtc休眠唤醒
  • WebScoket-服务器客户端双向通信
  • 【深度学习】通俗理解偏差(Bias)与方差(Variance)
  • Web 开发入门之旅:从静态页面到全栈应用的第一步
  • React面试常见题目
  • C++中 为什么要把基类指针指向子类对象?
  • STM32 FreeRTOS的任务创建和删除
  • 2_CSS3 背景 --[CSS3 进阶之路]
  • vue集成导出 txt文本文档 和 excel文档 的方法
  • jsdom爬虫程序中eBay主页内容爬取的异步处理
  • 从epoll事件的视角探讨TCP:三次握手、四次挥手、应用层与传输层之间的联系
  • 【论文笔记】Sign Language Video Retrieval with Free-Form Textual Queries
  • IDEA的Git界面(ALT+9)log选项不显示问题小记
  • 基于Java的推箱子游戏设计与实现
  • 31_搭建Redis分片集群
  • React中Fiber树构建过程详解——react中render一个App组件(包含子组件)的流程详解
  • 深度学习中的常见初始化方法:原理、应用与比较
  • C语言结构体如何实现位段
  • async++源码阅读——task模块
  • 【HM-React】08. Layout模块
  • 树状数组与线段树简单讲解与习题
  • SQLite 语法快速入门
  • 为AI聊天工具添加一个知识系统 之32 三“中”全“会”:推理式的ISA(父类)和IOS(母本)以及生成式CMN (双亲委派)之1
  • 数据预测2025年AI面试市场增幅超500%!