题单链接:https://www.luogu.com.cn/training/9349
Part 1.1 从零开始
语言基础题。
思路
让元和角成整数即可
比如一元五=15
题解
a,b=map(int,input().split())
c=10*a+b
print(c//19)
思路
因为只卖一种铅笔,就很简单了。把各个铅笔售卖方案单独遍历一遍,最后比较结果就可以
题解
import math
n=int(input())
p=[None]*3
p[0]=list(map(int,input().split()))
p[1]=list(map(int,input().split()))
p[2]=list(map(int,input().split()))
ans=float('inf') # 初始化为无穷大
for i in range(3):
res=math.ceil(n/p[i][0])* p[i][1]
ans=min(ans,res)
print(ans)
思路
定义三个数组
每个月 手里存下来的、 上交给妈妈的、 以及自己的花销
题解
import sys
month_save=[0]*13
month_mom=[0]*13
month_pay=[0]*13
#initialzation
#1 start 12 end, belong to [)
for i in range(1,13):
month_pay[i]=int(input())
for i in range(1,13):
if i==1:
month_save[1]=300-month_pay[1]
if month_save[1]//100>=1:
month_mom[1]=(month_save[1]//100)*100
month_save[1]=(month_save[1]%100)
continue
month_save[i]=month_save[i-1]+300-month_pay[i]
if month_save[i]<0:
print(-i)
break
if month_save[i]//100>=1:
month_mom[i]=(month_save[i]//100)*100+month_mom[i-1]#first give mom then upadate save
month_save[i]=(month_save[i]%100)
else:#need think more detalis ,and neglect :
month_mom[i]=month_mom[i-1]
else:
print(month_save[12]+int(1.2* month_mom[12]))
思路
内卷的小孩子
输入的每一行 加起来就是他今天上课的总时长,总时长>8 会不高兴
题解
max_mood = 0
day = 0
for i in range(1, 8):
t = list(map(int, input().split()))
a = t[0] + t[1]
if a > 8:
if a > max_mood:
max_mood = a
day = i
print(day)
思路
从1遍历到很大的数,中间发现Sn>k停下来就好了
题解
k=int(input())
s=0
for n in range(1,1000000):
s+=1/n
if s>k :
print(n)
break
思路
for i in (1,n+1):
i%10 看各位是不是x
然后i 再//10
or 直接转化成字符串用count统计
for i in (1,n+1):
str(i).count( str(x))
题解
n,x= map(int,input().split())
t=0
for i in range(1, n + 1):
t+=str(i).count(str(x))
print(t)
按图中这样走线,n=7时候 走到了1/4
思路
观察图中走线,发现把这样走线方式看成一行一行
那么就是1,2,3,4
到这里 再和题目中的7关联,发现 1+2+3<7<1+2+3+4 。
再看7刚好在第四根绿条上,这样我们就找到一个规律。
如果1+..+k<n<=1+..k+k+1 k>=2 ,那么第n个数一定在k+1条绿线上
而 n-(1+2+..+k)刚好等于 第n个数在这绿线上 第几个位置
再观察这绿线上有什么特点,是不是第一个位置是1/k+1, 然后2/k ... 到k+1/1
这样我们就知道这道题规律了,先看n在哪一行(比如k+1行)
然后看n在k+1行位置x,x=n-(1+2+..+k)。那么结果就是x/k+2-x
同时还要注意奇数行,如第三行,那么结果是k+2-x/x 。是反着来的
题解
n = int(input())
s = 0
for i in range(1, 1000000):
s += i
if n <= s:
k = i
pos = n - (s - i)
break
if k % 2 == 0:
print(f"{pos}/{k + 1 - pos}")
else:
print(f"{k + 1 - pos}/{pos}")
思路
is_neg=n<0 记录是不是负数
res+=按个把个位取得 ,再对之前的取得的结果*10
n//10 不断以10的倍率缩减
题解
import math
n=int(input())
res=0
if n!=0:
is_neg=n<0# push ahead
n=abs(n)
while n!=0:
res=res*10+n%10
n//=10
if is_neg:
print(-res)
else:
print(res)
else:
print(0)
Part 1.2 数组基础
-
P1046 陶陶摘苹果
-
apps=list(map(int,input().split())) high=int(input()) maxh=high+30 nums=sum(1 for i in apps if i<=maxh) print(nums)
-
P1047 校门外的树
-
l,m=map(int,input().split()) tree=[1]*(l+1) sum=0 for i in range(m): a1,a2=map(int,input().split()) for i in range(a1,a2+1): tree[i]=0 for i in range(l+1): if tree[i]==1: sum+=1 print(sum)
-
P1427 小鱼的数字游戏
-
a1=list(map(int,input().split())) a1.pop() a2=[] while(a1): a2.append(a1.pop()) print(" ".join(map(str,a2)))
-
P2141 珠心算测验
-
P5594 【XR-4】模拟赛
Part 1.3 字符串基础
- P5015 标题统计
-
s=str(input()) c=s.split() sum=0 for a in c: for b in a: sum+=1 print(sum)
- P1055 ISBN号码
-
mod="0123456789X" s=list(input()) j=1 sum=0 for i in range(12): if s[i]=='-':continue else: sum+=int(s[i])*j j+=1 last=sum%11 if mod[last]==s[12]: print('Right') else: s[12]=mod[last] strs="".join(s) print(strs)
太多了,先发布再说。以后填坑
- P1308 统计单词数
- P2010 回文日期
- P1012 拼数
- P5587 打字练习