蓝桥杯_数字诗意_java

问题描述

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

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

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

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

输入格式

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

第二行包含 n 个整数 a1,a2,…,an​,表示展示的数字。

输出格式

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

样例输入

3
3 6 8

样例输出

1

样例说明

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

评测用例规模与约定

对于 30% 的评测用例,1≤n≤10^3,1≤ai≤10^3。

对于所有评测用例,1≤n≤2×10^5,1≤ai≤10^16。

思路

        如果是奇数,肯定蕴含诗意;
        如果是偶数,如果一直除2,且结果>1,再模2的余数为1,就是有诗意的。比如6/2=3,3%2=1;但是8就不行,8/2=4,4/2=2,2/2=1就不是大于1。

代码

package 蓝桥;
import java.util.Scanner;
/**
 * @Auther:hsy
 * @Date: 2025-03-14 23:47
 * @Blog:https://blog.csdn.net/hsyhcr?spm=1000.2115.3001.5343
 * @Description:
 */
public class 数字诗意 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        long []a = new long[n];
        long cnt = 0;
        for(int i = 0;i < n;i ++) {
            a[i] = sc.nextLong();
            while (a[i] % 2 == 0 && a[i] > 1) {
                a[i] /= 2;
            }
            if (a[i] == 1) {
                cnt ++;
            }
        }
        System.out.println(cnt);
    }
}

蓝桥杯_数字诗意_java_第1张图片

你可能感兴趣的:(蓝桥杯,java,算法,数据结构)