数列求值

题目

给定数列 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)

posted on 2023-03-04 17:03  快乐的乙炔  阅读(1)  评论(0)    收藏  举报  来源