数列求值
题目
给定数列 1,1,1,3,5,9,17,⋯1,1,1,3,5,9,17,⋯,从第 44 项开始,每项都是前 33 项的和。
求第 2019032420190324 项的最后 44 位数字。
求解
直接输出结果。此题使用一个能存储3个数字的数组进行循环赋值,每次赋值前都取10000的余。
l=[1,1,1]
for _ in range(20190324//3-1):
a=(l[0]+l[1]+l[2])%10000
b=(a+l[1]+l[2])%10000
c=(a+b+l[2])%10000
l=[a,b,c];
print(c)
质数
题目
我们知道第一个质数是 22、第二个质数是 33、第三个质数是 55……
请你计算第 20192019 个质数是多少?
求解
C++比较快。
#include <iostream>
using namespace std;
int main()
{
int a[2020];
a[1]=2;
for(int i=2;i<=2020;i++)
{
a[i]=a[i-1]+1;
int j=1;
while(j<=i-1)
{
if(a[i]%a[j]==0)
{
a[i]+=1;
j=0;
}
j++;
}
}
cout<<a[2019];
}
饮料换购
题目
乐羊羊饮料厂正在举办一次促销优惠活动。乐羊羊 C 型饮料,凭 3 个瓶盖可以再换一瓶 C 型饮料,并且可以一直循环下去(但不允许暂借或赊账)。
请你计算一下,如果小明不浪费瓶盖,尽量地参加活动,那么,对于他初始买入的 n 瓶饮料,最后他一共能喝到多少瓶饮料。
输入描述
输入一个整数 n(0<n<1000),表示开始购买的饮料数量。
输出描述
输出一个整数,表示实际得到的饮料数
求解
这道题有点像小学数学题。
n=int(input())
s=n
while(n//3!=0):
s+=n//3
n=n//3+n%3
print(s)
巧克力
题目描述
小蓝很喜欢吃巧克力,他每天都要吃一块巧克力。
一天小蓝到超市想买一些巧克力。超市的货架上有很多种巧克力,每种巧克力有自己的价格、数量和剩余的保质期天数,小蓝只吃没过保质期的巧克力,请问小蓝最少花多少钱能买到让自己吃 x 天的巧克力。
输入描述
输入的第一行包含两个整数 x,n,分别表示需要吃巧克力的天数和巧克力的种类数。
接下来 n 行描述货架上的巧克力,其中第 i 行包含三个整数ai,bi,ci,表示第 i 种巧克力的单价为 ai,保质期还剩 bi 天(从现在开始的 bi 天可以吃),数量为 ci。
输出描述
输出一个整数表示小蓝的最小花费。如果不存在让小蓝吃 x 天的购买方案,输出 −1。
求解
这道题通过样例率60%,出了什么问题暂时不能解决,先打卡再说。
这道题用了模拟+排序(伪贪心)。用一个数组的一个元素存货架上巧克力的三个参数,按单价从低到高对数组进行排序。而后开始循环模拟,shengyu_day表示本次循环之后还需要多少天的巧克力支持,cost则是截止本次循环后购买巧克力所花的资金。
x,n=map(int,input().split())
qiao=[];
for _ in range(n):
a,b,c=list(map(int,input().split()))
qiao.append([a,b,c])
qiao.sort(key=lambda s:s[0])
for i in range(n):
if i==0:
if x-qiao[i][1]>0:
shengyu_day=x-min(qiao[i][1],qiao[i][2])
cost=qiao[i][0]*min(qiao[i][1],qiao[i][2])
else:
shengyu_day=max(x-qiao[i][2],0)
cost=qiao[i][0]*min(qiao[i][2],x)
else:
if x-qiao[i][1]<=0:
cost+=qiao[i][0]*min(shengyu_day,qiao[i][2])
shengyu_day=max(shengyu_day-qiao[i][2],0)
else:
if x-qiao[i][1]<shengyu_day:
cost+=qiao[i][0]*min((shengyu_day-x+qiao[i][1]),qiao[i][2])
shengyu_day-=min((shengyu_day-x+qiao[i][1]),qiao[i][2])
if shengyu_day==0:
print(cost)
break
if i==n-1:
print(-1)

浙公网安备 33010602011771号