洛谷官方提单——【入门3】循环结构——python

洛谷官方提单【入门3】循环结构

【深基4.例2】找最小值

题目描述

给出 n n n n n n 个整数 a i a_i ai,求这 n n n 个整数中最小值是什么。

输入格式

第一行输入一个正整数 n n n,表示数字个数。

第二行输入 n n n 个非负整数,表示 a 1 , a 2 … a n a_1,a_2 \dots a_n a1,a2an,以空格隔开。

输出格式

输出一个非负整数,表示这 n n n 个非负整数中的最小值。

样例 #1

样例输入 #1

8
1 9 2 6 0 8 1 7

样例输出 #1

0

提示

数据保证, n ≤ 100 n\le100 n100 0 ≤ a i ≤ 1000 0\le a_i \le 1000 0ai1000

代码

n = int(input())
ls = list(map(eval,input().split()))
x = ls[0]
for i in ls[1:]:
    if i<x:
        x = i

print(x)

【深基4.例3】分类平均

题目描述

给定 n n n k k k,将从 1 到 n n n 之间的所有正整数可以分为两类:A 类数可以被 k k k 整除(也就是说是 k k k 的倍数),而 B 类数不能。请输出这两类数的平均数,精确到小数点后 1 1 1 位,用空格隔开。

数据保证两类数的个数都不会是 0 0 0

输入格式

输入两个正整数 n n n k k k

输出格式

输出一行,两个实数,分别表示 A 类数与 B 类数的平均数。精确到小数点后一位。

样例 #1

样例输入 #1

100 16

样例输出 #1

56.0 50.1

提示

数据保证, 1 ≤ n ≤ 10000 1 \leq n\leq 10000 1n10000 1 ≤ k ≤ 100 1 \leq k \leq 100 1k100

代码

def average(ls):
    s = 0
    for i in ls:
        s = s+i
    a = s/len(ls)
    print('{:.1f}'.format(a),end=' ')


n, k = map(int, input().split())
A = []
B = []
for i in range(1,n+1):
    if i % k == 0:
        A.append(i)
    else:
        B.append(i)
average(A)
average(B)

【深基4.例4】一尺之棰

题目描述

《庄子》中说到,“一尺之棰,日取其半,万世不竭”。第一天有一根长度为 a a a 的木棍,从第二天开始,每天都要将这根木棍锯掉一半(每次除 2 2 2,向下取整)。第几天的时候木棍的长度会变为 1 1 1

输入格式

输入一个正整数 a a a,表示木棍长度。

输出格式

输出一个正整数,表示要第几天的时候木棍长度会变为 1 1 1

样例 #1

样例输入 #1

100

样例输出 #1

7

提示

数据保证, 1 ≤ a ≤ 1 0 9 1 \le a\le 10^9 1a109

代码

n = int(input())
s = 1
while n > 1:
    n = n//2
    s = s+1
print(s)

【深基4.例6】数字直角三角形

题目描述

给出 n n n,请输出一个直角边长度是 n n n 的数字直角三角形。所有数字都是 2 2 2 位组成的,如果没有 2 2 2 位则加上前导 0 0 0

输入格式

输入一个正整数 n n n

输出格式

输出如题目要求的数字直角三角形。

样例 #1

样例输入 #1

5

样例输出 #1

0102030405
06070809
101112
1314
15

提示

数据保证, 1 ≤ n ≤ 13 1\le n\le13 1n13

代码

n = int(input())
s = 0
for i in range(n):
    for j in range(n-i):
        s = s + 1
        if s < 10:
            print('0{}'.format(s), end='')
        else:
            print(s, end='')
    print()

[NOIP1998 普及组] 阶乘之和

题目描述

用高精度计算出 S = 1 ! + 2 ! + 3 ! + ⋯ + n ! S = 1! + 2! + 3! + \cdots + n! S=1!+2!+3!++n! n ≤ 50 n \le 50 n50)。

其中 ! 表示阶乘,定义为 n ! = n × ( n − 1 ) × ( n − 2 ) × ⋯ × 1 n!=n\times (n-1)\times (n-2)\times \cdots \times 1 n!=n×(n1)×(n2)××1。例如, 5 ! = 5 × 4 × 3 × 2 × 1 = 120 5! = 5 \times 4 \times 3 \times 2 \times 1=120 5!=5×4×3×2×1=120

输入格式

一个正整数 n n n

输出格式

一个正整数 S S S,表示计算结果。

样例 #1

样例输入 #1

3

样例输出 #1

9

提示

【数据范围】

对于 100 % 100 \% 100% 的数据, 1 ≤ n ≤ 50 1 \le n \le 50 1n50

【其他说明】

注,《深入浅出基础篇》中使用本题作为例题,但是其数据范围只有 n ≤ 20 n \le 20 n20,使用书中的代码无法通过本题。

如果希望通过本题,请继续学习第八章高精度的知识。

NOIP1998 普及组 第二题

代码

def jc(n):
    x = 1
    for i in range(1, n+1):
        x = x * i
    return x


n = int(input())
s = 0
for i in range(1, n+1):
    s = s + jc(i)
print(s)

[NOIP2013 普及组] 计数问题

题目背景

NOIP2013 普及组 T1

题目描述

试计算在区间 1 1 1 n n n 的所有整数中,数字 x x x 0 ≤ x ≤ 9 0\le x\le9 0x9)共出现了多少次?例如,在 1 1 1 11 11 11 中,即在 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 1,2,3,4,5,6,7,8,9,10,11 1,2,3,4,5,6,7,8,9,10,11 中,数字 1 1 1 出现了 4 4 4 次。

输入格式

2 2 2 个整数 n , x n,x n,x,之间用一个空格隔开。

输出格式

1 1 1 个整数,表示 x x x 出现的次数。

样例 #1

样例输入 #1

11 1

样例输出 #1

4

提示

对于 100 % 100\% 100% 的数据, 1 ≤ n ≤ 1 0 6 1\le n\le 10^6 1n106 0 ≤ x ≤ 9 0\le x \le 9 0x9

代码

n, x = map(int, input().split())
s = 0
for i in range(1, n+1):
    s = s+str(i).count(str(x))
print(s)

[NOIP2002 普及组] 级数求和

题目描述

已知: S n = 1 + 1 2 + 1 3 + … + 1 n S_n= 1+\dfrac{1}{2}+\dfrac{1}{3}+…+\dfrac{1}{n} Sn=1+21+31++n1。显然对于任意一个整数 k k k,当 n n n 足够大的时候, S n > k S_n>k Sn>k

现给出一个整数 k k k,要求计算出一个最小的 n n n,使得 S n > k S_n>k Sn>k

输入格式

一个正整数 k k k

输出格式

一个正整数 n n n

样例 #1

样例输入 #1

1

样例输出 #1

2

提示

【数据范围】

对于 100 % 100\% 100% 的数据, 1 ≤ k ≤ 15 1\le k \le 15 1k15

【题目来源】

NOIP 2002 普及组第一题

代码

k = int(input())
n = 0
s = 0
while s <= k:
    n = n + 1
    s = s + 1/n
print(n)

[NOIP2015 普及组] 金币

题目背景

NOIP2015 普及组 T1

题目描述

国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天),每天收到两枚金币;之后三天(第四、五、六天),每天收到三枚金币;之后四天(第七、八、九、十天),每天收到四枚金币……;这种工资发放模式会一直这样延续下去:当连续 n n n 天每天收到 n n n 枚金币后,骑士会在之后的连续 n + 1 n+1 n+1 天里,每天收到 n + 1 n+1 n+1 枚金币。

请计算在前 k k k 天里,骑士一共获得了多少金币。

输入格式

一个正整数 k k k,表示发放金币的天数。

输出格式

一个正整数,即骑士收到的金币数。

样例 #1

样例输入 #1

6

样例输出 #1

14

样例 #2

样例输入 #2

1000

样例输出 #2

29820

提示

【样例 1 说明】

骑士第一天收到一枚金币;第二天和第三天,每天收到两枚金币;第四、五、六天,每天收到三枚金币。因此一共收到 1 + 2 + 2 + 3 + 3 + 3 = 14 1+2+2+3+3+3=14 1+2+2+3+3+3=14 枚金币。

对于 100 % 100\% 100% 的数据, 1 ≤ k ≤ 1 0 4 1\le k\le 10^4 1k104

代码

k = int(input())
x = k
while (x ** 2 + x)/2 > k:
    x = x - 1
s = k-(x ** 2 + x)/2
m = 0
for i in range(1, x+1):
    m = m + i**2
m = m+s*(x+1)
print(int(m))

【深基4.例11】数列求和

题目描述

计算 1 + 2 + 3 + ⋯ + ( n − 1 ) + n 1+2+3+\cdots+(n-1)+n 1+2+3++(n1)+n 的值,其中正整数 n n n 不大于 100。由于你没有高斯聪明,所以你不被允许使用等差数列求和公式直接求出答案。

输入格式

输入一个正整数 n n n

输出格式

输出一个正整数,表示最后求和的答案。

样例 #1

样例输入 #1

100

样例输出 #1

5050

提示

数据保证, 1 ≤ n ≤ 100 1 \leq n \leq 100 1n100

代码

n = int(input())
s=0
for i in range(1, n+1):
    s = s + i
print(s)

【深基4.例13】质数口袋

题目描述

小 A 有一个质数口袋,里面可以装各个质数。他从 2 2 2 开始,依次判断各个自然数是不是质数,如果是质数就会把这个数字装入口袋。

口袋的负载量就是口袋里的所有数字之和。

但是口袋的承重量有限,装的质数的和不能超过 L L L。给出 L L L,请问口袋里能装下几个质数?将这些质数从小往大输出,然后输出最多能装下的质数的个数,数字之间用换行隔开。

输入格式

一行一个正整数 L L L

输出格式

将这些质数从小往大输出,然后输出最多能装下的质数个数,所有数字之间有一空行。

样例 #1

样例输入 #1

100

样例输出 #1

2
3
5
7
11
13
17
19
23
9

样例 #2

样例输入 #2

5

样例输出 #2

2
3
2

样例 #3

样例输入 #3

11

样例输出 #3

2
3
5
3

提示

数据保证, 1 ≤ L ≤ 10 5 1 \le L \le {10}^5 1L105

代码

def zhishu(n):
    for i in range(2, n):
        if n % i == 0:
            return False
    else:
        return True


l = int(input())
m = 1
n = 0
s = 0
while s < l:
    m = m + 1
    if zhishu(m):
        s = s + m
        if s <= l:
            n = n + 1
            print(m)
print(n)

[USACO1.5] 回文质数 Prime Palindromes

题目描述

因为 151 151 151 既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 151 151 是回文质数。

写一个程序来找出范围 [ a , b ] ( 5 ≤ a < b ≤ 100 , 000 , 000 ) [a,b] (5 \le a < b \le 100,000,000) [a,b](5a<b100,000,000)(一亿)间的所有回文质数。

输入格式

第一行输入两个正整数 a a a b b b

输出格式

输出一个回文质数的列表,一行一个。

样例 #1

样例输入 #1

5 500

样例输出 #1

5
7
11
101
131
151
181
191
313
353
373
383

提示

Hint 1: Generate the palindromes and see if they are prime.

提示 1: 找出所有的回文数再判断它们是不是质数(素数).

Hint 2: Generate palindromes by combining digits properly. You might need more than one of the loops like below.

提示 2: 要产生正确的回文数,你可能需要几个像下面这样的循环。

题目翻译来自NOCOW。

USACO Training Section 1.5

产生长度为 5 5 5 的回文数:

for (d1 = 1; d1 <= 9; d1+=2) {    // 只有奇数才会是素数
     for (d2 = 0; d2 <= 9; d2++) {
         for (d3 = 0; d3 <= 9; d3++) {
           palindrome = 10000*d1 + 1000*d2 +100*d3 + 10*d2 + d1;//(处理回文数...)
         }
     }
 }

代码

def f1(x):#判断素数
    j=2
    while j*j<=x:
        if x%j==0:
            return False
        j+=1
    return x!=0 and x!=1
a,b=map(int,input().split())
if b>=5 and a<=5:print(5)#输出一位数和特例(即每个数要想输出就要在[a,b]之间)
if b>=7 and a<=7:print(7)
if b>=11 and a<=11:print(11)
if b>100:#位数为3位,直接查找位数为三位的回文质数
    for i in range(1,10):
        for j in range(10):
            tem=int(str(i)+str(j)+str(i))
            if tem>b: exit(0)
            if f1(tem) and a<=tem<=b:print(tem)
if b>10000:#位数位5位,直接查找位数为5位的回文质数
    for i in range(1,10):
        for j in range(10):
            for k in range(10):
                tem=int(str(i)+str(j)+str(k)+str(j)+str(i))
                if tem>b:exit(0)
                if f1(tem)and a<=tem<=b:print(tem)
if b>1000000:
    for i in range(1,10):
        for j in range(10):
            for k in range(10):
                for l in range(10):
                    tem=int(str(i)+str(j)+str(k)+str(l)+str(k)+str(j)+str(i))
                    if tem > b: exit(0)
                    if f1(tem)==True and a<=tem<=b: print(tem)

小玉在游泳

题目描述

小玉开心的在游泳,可是她很快难过的发现,自己的力气不够,游泳好累哦。已知小玉第一步能游 2 2 2 米,可是随着越来越累,力气越来越小,她接下来的每一步都只能游出上一步距离的 98 % 98\% 98%。现在小玉想知道,如果要游到距离 s s s 米的地方,她需要游多少步呢。请你编程解决这个问题。

输入格式

输入一个实数 s s s(单位:米),表示要游的目标距离。

输出格式

输出一个整数,表示小玉一共需要游多少步。

样例 #1

样例输入 #1

4.3

样例输出 #1

3

提示

数据保证, 0 ≤ s < 100 0 \leq s < 100 0s<100,且 s s s 小数点后最多只有一位。

代码

s = float(input())
per = 0.98
x = 2
s1 = 0
b = 0
while s1<s:
    s1 = s1 + x
    x = x * per
    b = b + 1
print(b)

[NOIP2011 普及组] 数字反转

题目描述

给定一个整数 N N N,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例 2)。

输入格式

一个整数 N N N

输出格式

一个整数,表示反转后的新数。

样例 #1

样例输入 #1

123

样例输出 #1

321

样例 #2

样例输入 #2

-380

样例输出 #2

-83

提示

【数据范围】

$-1,000,000,000\leq N\leq 1,000,000,000 $。

noip2011 普及组第一题

代码

n = input()
if n =='0':
    print(n)

elif n[0] == '-':
    print('-', end='')
    x = -1
    while n[x] == '0':
        x = x-1
    for i in range(len(n)+x, 0, -1):
        print(n[i], end='')

else:
    x = -1
    while n[x] == '0':
        x = x - 1
    for i in range(len(n)+x, -1, -1):
        print(n[i], end='')

月落乌啼算钱(斐波那契数列)

题目背景

(本道题目木有隐藏歌曲……不用猜了……)

《爱与愁的故事第一弹·heartache》最终章。

吃完 pizza,月落乌啼知道超出自己的预算了。为了不在爱与愁大神面前献丑,只好还是硬着头皮去算钱……

题目描述

算完钱后,月落乌啼想着:“你坑我!”于是当爱与愁大神问多少钱时,月落乌啼说了一堆乱码。爱与愁大神说:“算了算了,我只问第 n n n 样菜价格多少?”月落乌啼写出了:

F n = ( 1 + 5 2 ) n − ( 1 − 5 2 ) n 5 F_n=\dfrac{\left(\frac{1+\sqrt{5}}{2}\right)^n-\left(\frac{1-\sqrt{5}}{2}\right)^n}{\sqrt{5}} Fn=5 (21+5 )n(215 )n

由于爱与愁大神学过编程,于是就用 1 1 1 分钟的时间求出了 F n F_n Fn 的结果。月落乌啼为此大吃一惊。你能学学爱与愁大神求出 F n F_n Fn 的值吗?

输入格式

一行一个自然数 n n n

输出格式

只有 1 1 1 行一个实数 F n F_n Fn,保留两位小数。

样例 #1

样例输入 #1

6

样例输出 #1

8.00

提示

对于所有数据: 0 ≤ n ≤ 48 0 \leq n\leq 48 0n48

代码

n = int(input())
f = ((((1+5**0.5)/2)**n)-(((1-5**0.5)/2)**n))/5**0.5
print("{:.2f}".format(f))

【深基4.习5】求极差 / 最大跨度值

题目描述

给出 n n n n n n 个整数 a i a_i ai,求这 n n n 个整数中的极差是什么。极差的意思是一组数中的最大值减去最小值的差。

输入格式

第一行输入一个正整数 n n n,表示整数个数。

第二行输入 n n n 个整数 a 1 , a 2 … a n a_1,a_2 \dots a_n a1,a2an,以空格隔开。

输出格式

输出一个整数,表示这 n n n 个整数的极差。

样例 #1

样例输入 #1

6
4 1 5 1 4 1

样例输出 #1

4

提示

数据保证, 1 ≤ n ≤ 100 1 \leq n\leq 100 1n100 0 ≤ a i ≤ 1000 0\le a_i \le 1000 0ai1000

代码

n = int(input())
ls = list(map(eval, input().split()))
ma = ls[0]
mi = ls[0]
for i in ls:
    if i > ma:
        ma = i
    if i < mi:
        mi = i
print(ma-mi)

最长连号

题目描述

输入长度为 n n n 的一个正整数序列,要求输出序列中最长连号的长度。

连号指在序列中,从小到大的连续自然数。

输入格式

第一行,一个整数 n n n

第二行, n n n 个整数 a i a_i ai,之间用空格隔开。

输出格式

一个数,最长连号的个数。

样例 #1

样例输入 #1

10
1 5 6 2 3 4 5 6 8 9

样例输出 #1

5

提示

数据规模与约定

对于 100 % 100\% 100% 的数据,保证 1 ≤ n ≤ 1 0 4 1 \leq n \leq 10^4 1n104 1 ≤ a i ≤ 1 0 9 1 \leq a_i \leq 10^9 1ai109

代码

n = int(input())
a = list(map(int, input().split()))
ret = 1
m = 1
for i in range(1, n):
    if a[i] == a[i-1] + 1:
        ret += 1
        m = max(m, ret)
    else:
        ret = 1
print(m)

[NOIP2012 普及组] 质因数分解

题目描述

已知正整数 n n n 是两个不同的质数的乘积,试求出两者中较大的那个质数。

输入格式

输入一个正整数 n n n

输出格式

输出一个正整数 p p p,即较大的那个质数。

样例 #1

样例输入 #1

21

样例输出 #1

7

提示

1 ≤ n ≤ 2 × 1 0 9 1 \le n\le 2\times 10^9 1n2×109

NOIP 2012 普及组 第一题

代码

n = int(input())
if n == 1:
    print("1")
else:
    for i in range(2, n + 1):
        if n % i == 0:
            print(int(n/i))
            break

【深基4.习8】求三角形

题目描述

模仿例题,打印出不同方向的正方形,然后打印三角形矩阵。中间有个空行。

输入格式

输入矩阵的规模,不超过 9 9 9

输出格式

输出矩形和正方形

样例 #1

样例输入 #1

4

样例输出 #1

01020304
05060708
09101112
13141516

      01
    0203
  040506
07080910

代码

n = int(input())
x = 1
for i in range(n):
    for j in range(n):
        if x < 10:
            print('0{}'.format(x), end='')
        else:
            print(x, end='')
        x = x+1
    print()
print()
x = 1
for i in range(n):
    for j in range(n-i-1):
        print('  ', end='')
    for j in range(i+1):
        if x < 10:
            print('0{}'.format(x), end='')
        else:
            print(x, end='')
        x = x+1
    print()

【深基4.习9】打分

题目描述

现在有 n ( n ≤ 1000 ) n(n \le 1000) n(n1000) 位评委给选手打分,分值从 0 0 0 10 10 10。需要去掉一个最高分,去掉一个最低分(如果有多个最高或者最低分,也只需要去掉一个),剩下的评分的平均数就是这位选手的得分。现在输入评委人数和他们的打分,请输出选手的最后得分,精确到 2 2 2 位小数。

输入格式

第一行输入一个正整数 n n n,表示有 n n n 个评委。

第二行输入 n n n 个正整数,第 i i i 个正整数表示第 i i i 个评委打出的分值。

输出格式

输出一行一个两位小数,表示选手的最后得分。

样例 #1

样例输入 #1

5
9 5 6 8 9

样例输出 #1

7.67

提示

数据保证, 3 ≤ n ≤ 1000 3 \leq n \leq 1000 3n1000,每个评委打出的分值为为 0 0 0 10 10 10(含 0 0 0 10 10 10)之间的整数。

代码

n = int(input())
ls = list(map(eval, input().split()))
ma = ls[0]
mi = ls[0]
s = 0
for i in ls:
    s = s + i
    if i > ma:
        ma = i
    if i < mi:
        mi = i
s = s-ma-mi
print('{:.2f}'.format(s/(n-2)))

[COCI2017-2018#6] Davor

题面翻译

在征服南极之后,Davor 开始了一项新的挑战。下一步是在西伯利亚、格林兰、挪威的北极圈远征。他将在 2018 2018 2018 12 12 12 31 31 31 日开始出发,在这之前需要一共筹集 n n n 元钱。他打算在每个星期一筹集 x x x 元,星期二筹集 x + k x+k x+k 元,……,星期日筹集 x + 6 k x+6k x+6k 元,并连续筹集 52 52 52 个星期。其中 x , k x,k x,k 为正整数,并且满足 1 ≤ x ≤ 100 1 \le x \le 100 1x100

现在请你帮忙计算 x , k x,k x,k 为多少时,能刚好筹集 n n n 元。

如果有多个答案,输出 x x x 尽可能大, k k k 尽可能小的。注意 k k k 必须大于 0 0 0

题目描述

After successfully conquering the South Pole, Davor is preparing for new challenges. Next up is the Arctic expedition to Siberia, Greenland and Norway. He begins his travels on 31 December 2018, and needs to collect ​N kunas (Croatian currency) by then. In order to do this, he has decided to put away ​X (​X ≤ 100) kunas every Monday to his travel fund, ​X + K kunas every Tuesday, ​X + 2* ​K every Wednesday, and so on until Sunday, when he will put away ​X + 6* ​K kunas. This way, he will collect money for 52 weeks, starting with 1 January 2018 (Monday) until 30 December 2018 (Sunday).

If we know the amount of money ​N​, output the values ​X and ​K so that it is possible to collect the ​exact money amount in the given timespan. The solution will always exist, and if there are multiple, output the one with the greatest ​X ​ and smallest ​K ​.

输入格式

The first line of input contains the integer ​N​ (1456 ≤ ​N​ ≤ 145600), the number from the task.

输出格式

The first line of output must contain the value of ​X (​0 < ​X ​≤ 100 ​)​, and the second the value of
K (K ​> 0 ​)​.

样例 #1

样例输入 #1

1456

样例输出 #1

1
1

样例 #2

样例输入 #2

6188

样例输出 #2

14
1

样例 #3

样例输入 #3

40404

样例输出 #3

99
4

代码

n = int(input())
x = n // 52
for i in range(1, x+1):
    m = x-21*i
    if m % 7 == 0 and m//7 <= 100:
        print(m//7)
        print(i)
        break

[NOIP2004 提高组] 津津的储蓄计划

题目描述

津津的零花钱一直都是自己管理。每个月的月初妈妈给津津 300 300 300 元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同。

为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里,到了年末她会加上 20 % 20\% 20% 还给津津。因此津津制定了一个储蓄计划:每个月的月初,在得到妈妈给的零花钱后,如果她预计到这个月的月末手中还会有多于 100 100 100 元或恰好 100 100 100 元,她就会把整百的钱存在妈妈那里,剩余的钱留在自己手中。

例如 11 11 11月初津津手中还有 83 83 83 元,妈妈给了津津 300 300 300 元。津津预计 11 11 11月的花销是 180 180 180 元,那么她就会在妈妈那里存 200 200 200 元,自己留下 183 183 183 元。到了 11 11 11 月月末,津津手中会剩下 3 3 3 元钱。

津津发现这个储蓄计划的主要风险是,存在妈妈那里的钱在年末之前不能取出。有可能在某个月的月初,津津手中的钱加上这个月妈妈给的钱,不够这个月的原定预算。如果出现这种情况,津津将不得不在这个月省吃俭用,压缩预算。

现在请你根据 2004 2004 2004 1 1 1 月到 12 12 12 月每个月津津的预算,判断会不会出现这种情况。如果不会,计算到 2004 2004 2004 年年末,妈妈将津津平常存的钱加上 20 % 20\% 20% 还给津津之后,津津手中会有多少钱。

输入格式

12 12 12 行数据,每行包含一个小于 350 350 350 的非负整数,分别表示 1 1 1 月到 12 12 12 月津津的预算。

输出格式

一个整数。如果储蓄计划实施过程中出现某个月钱不够用的情况,输出 − X -X X X X X 表示出现这种情况的第一个月;否则输出到 2004 2004 2004 年年末津津手中会有多少钱。

注意,洛谷不需要进行文件输入输出,而是标准输入输出。

样例 #1

样例输入 #1

290
230
280
200
300
170
340
50 
90 
80 
200
60

样例输出 #1

-7

样例 #2

样例输入 #2

290 
230 
280 
200 
300 
170 
330 
50 
90 
80 
200 
60

样例输出 #2

1580

代码

m = 0
y = 0
for i in range(1, 13):
    x = int(input())
    y = y + 300 - x
    if y < 0:
        print('-{}'.format(i))
        break
    n = y // 100
    m = m + n * 100
    y = y - n * 100
else:
    print('{:.0f}'.format(m*1.2+y))

  • 24
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值