题目1 数字诗意
在诗人的眼中,数字是生活的韵律,也是诗意的表达。
小蓝,当代顶级诗人与数学家,被赋予了”数学诗人”的美誉。他擅长将冰冷的数字与抽象的诗意相融合,并用优雅的文字将数学之美展现于纸上。
某日,小蓝静坐书桌前,目光所及,展现着 n 个数字,它们依次为 a1,a2,…,an,熠熠生辉。
小蓝悟到,如果一个数能够以若干个(至少两个)连续的正整数相加表示,那么它就蕴含诗意。
例如,数字 6 就蕴含诗意,因为它可以表示为 1+2+3。
而 8 则缺乏诗意,因为它无法用连续的正整数相加表示。
小蓝希望他面前的所有数字都蕴含诗意,为此,他决定从这 n 个数字中删除一部分。
请问,小蓝需要删除多少个数字,才能使剩下的数字全部蕴含诗意?
输入格式
第一行包含一个整数 n,表示展示的数字个数。
第二行包含 n 个整数 a1,a2,…,an,表示展示的数字。
输出格式
输出一个整数,表示小蓝需要删除的数字个数,以使剩下的数字全部蕴含诗意。
数据范围
对于 30% 的评测用例,1≤n≤103,1≤ai≤103。
对于所有评测用例,1≤n≤2×105,1≤ai≤1016。
输入样例:
3
3 6 8
输出样例:
1
样例解释
在样例中,数字 3 可以表示为 1+2,数字 6 可以表示为 1+2+3,数字 8 无法表示为连续的正整数相加,因此,需要删除的数字个数为 1。
思路
蓝桥杯有些题目确实光理解就有难度,一开始我以为11=2+3+4+2
这种不蕴含诗意,后来才知道它是蕴含诗意的,因为只要有2个及以上的连续数字
即可
打表找规律:4,8,16,32都不蕴含诗意➡️只要一个数是2的次幂,就不蕴含诗意
python代码
import os
import sysn=int(input())
data=list(map(int,input().split()))
ans=0
for i in range(n):if data[i]%2==0:while data[i]%2==0:data[i]//=2if data[i]==1:ans+=1
print(ans)
知识点
蓝桥杯笔记:蓝桥杯备赛笔记
- 需要注意与下列代码的区别:
import os
import sys
n=int(input())
data=list(map(int,input().split()))
ans=0
for i in range(n):if data[i]%2==0:while data[i]%2==0:data[i]//=2if data[i]==1:ans+=1
print(ans)
区别在于1本身也不蕴含诗意