洛谷基础题练习7

1. 第k小整数

题目描述

现有 n 个正整数,要求出这 n 个正整数中的第 k 个最小整数(相同大小的整数只计算一次)。

输入格式

第一行为 n (n ≤ 10000)和 k(k ≤ 1000); 第二行开始为 n 个正整数的值(均小于 30000),整数间用空格隔开。

输出格式

第k个最小整数的值;若无解,则输出 NO RESULT

样例输入

10 3
1 3 3 7 2 5 1 2 4 6

样例输出

3
n, k = map(int, input().strip().split())
numbers = [int(i) for i in input().strip().split()]
new_numbers = sorted(list(set(numbers)))
if len(new_numbers) >= k:
    print(new_numbers[k-1])
else:
    print('NO RESULT')

2. 小鱼是否有危险

题目描述

有一次,小鱼要从 A 处沿直线往右边游,小鱼第一秒可以游 7 米,从第二秒开始每秒游的距离只有前一秒的 98%。有个极其邪恶的猎人在距离 A 处右边 s 米的地方,安装了一个隐蔽的探测器,探测器左右 x 米之内是探测范围。一旦小鱼进入探测器的范围,探测器就会在这一秒结束时把信号传递给那个猎人,猎人在一秒后就要对探测器范围内的水域进行抓捕,这时如果小鱼还在这范围内就危险了。也就是说小鱼一旦进入探测器范围,如果能在下 1 秒的时间内马上游出探测器的范围,还是安全的。现在给出 s 和 x 的数据,请你判断小鱼会不会有危险?如果有危险输出 y,没有危险输出 n

输入格式

一行内输入两个实数,用空格分隔,表示 s 和 x(1 ≤ s,x ≤ 100,小数点后最多有 6 位小数。)。

输出格式

一行内输出’y’或者’n’表示小鱼是否会有危险。

样例输入

14 1

样例输出

n
#include <stdio.h>

int main()
{
	float s, x;
	scanf("%f %f", &s, &x);
	float distance = 7;
	float count = 7;
    // 当小鱼游到s-x处时,进入探测器的探测范围
	while (count < (s - x))
	{
		distance = distance * 0.98;
		count += distance;
	}
    // 判断进入探测范围的下一秒是否能游到探测范围之外
	if (distance <= x * 2)
		printf("y");
	else
		printf("n");
	return 0;
}

3. 三角函数

题目描述

输入一组勾股数 a,b,c(a,b,c 均不相等, a,b,c 为正整数且 ∈[1,109]),用分数格式输出其较小锐角的正弦值。(要求约分。)

输入格式

一行,包含三个正整数,即勾股数 a,b,c(无大小顺序)。

输出格式

一行,包含一个分数,即较小锐角的正弦值

样例输入 #1

3 5 4

样例输出 #1

3/5
def gcd(a, b):
    """求最大公约数"""
    if a > b:
        a, b = b, a
    ans = 1
    for i in range(1, a + 1):
        if a % i == 0 and b % i == 0:
            ans = i
    return ans


a, b, c = map(int, input().strip().split())
line_max = max(a, b, c)
line_min = min(a, b, c)
line_mid = a + b + c - line_min - line_max
# 较小锐角的正弦值 = 最短边 / 斜边(最长边)
# 求最短边与斜边(最长边)的最大公约数
gcd_num = gcd(line_min, line_max)
# 进行约分
num1 = line_min // gcd_num
num2 = line_max // gcd_num
print(f'{num1}/{num2}')

4. 质因数分解

题目描述

已知正整数 n(1 ≤ n ≤ 2×109) 是两个不同的质数的乘积,试求出两者中较大的那个质数。

输入格式

输入一个正整数 n。

输出格式

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

样例输入

21

样例输出

7
import math


def is_prime(num):
    """判断是否是素数"""
    if num == 1:
        return False
    k = int(math.sqrt(num))
    for i in range(2, k + 1):
        if num % i == 0:
            return False
    return True


n = int(input().strip())
max_prime = 0
for i in range(2, int(math.sqrt(n)) + 1):
    if is_prime(i) and n % i == 0:
        num = n // i
        if is_prime(num):
            num = max(i, num)
            if num > max_prime:
                max_prime = num
print(max_prime)

5. 不高兴的津津

题目描述

津津上初中了。妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。另外每周妈妈还会送她去学习朗诵、舞蹈和钢琴。但是津津如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。假设津津不会因为其它事不高兴,并且她的不高兴不会持续到第二天。请你帮忙检查一下津津下周的日程安排,看看下周她会不会不高兴;如果会的话,哪天最不高兴。

输入格式

输入包括 7 行数据,分别表示周一到周日的日程安排。每行包括两个小于 10 的非负整数,用空格隔开,分别表示津津在学校上课的时间和妈妈安排她上课的时间。

输出格式

一个数字。如果不会不高兴则输出 0 0 0,如果会则输出最不高兴的是周几(用 1, 2, 3, 4, 5, 6, 7分别表示周一,周二,周三,周四,周五,周六,周日)。如果有两天或两天以上不高兴的程度相当,则输出时间最靠前的一天。

样例输入

5 3
6 2
7 2
5 3
5 4
0 4
0 6

样例输出

3
week = {str(i): 0 for i in range(1, 8)}
mood = 0
for i in range(1, 8):
    school, others = map(int, input().strip().split())
    bad_mood = school + others - 8
    week[str(i)] = bad_mood
    if bad_mood > mood:
        mood = bad_mood
# print(week)
if mood == 0:
    print(0)
else:
    for k, v in week.items():
        if v == mood:
            print(k)
            break

6. 津津的储蓄计划

题目描述

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

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

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

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

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

输入格式

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

输出格式

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

样例输入 #1

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

样例输出 #1

-7

样例输入 #2

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

样例输出 #2

1580
save = 0
left = 0
mark = 0
for i in range(1, 13):
    budget = int(input().strip())  # 预算
    left = left + 300 - budget
    if left < 0:
        mark = -i
        break
    else:
        save += left - (left % 100)  # 将整百的钱存起来
        left = left % 100  # 手里剩下的钱
        # print(save, left)

if mark == 0:
    result = save * 1.2 + left
    print(int(result))
else:
    print(mark)

7. 不高兴的津津(升级版)

题目描述

津津上初中了。妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。另外每天妈妈还会送她去学习朗诵、舞蹈和钢琴。但是津津如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。

假设津津不会因为其它事不高兴,但是她的不高兴会(当然高兴也会)持续到第二天。请你帮忙检查一下津津以后n天的日程安排,看看以后n天她会不会不高兴(计算方法:用昨天不高兴程度加上今天上课总时间减去8后得到的数作为今天不高兴程度);输出以后n天结束后不高兴程度和是多少。

输入格式

第1行:一个数n(n<=3000)

第2行~第n+1行:每行两个数,表示这天上学时间和课外补习班时间(上学时间和上课时间各不超过8,和不超过16)

输出格式

一个数,这n天过后的不高兴程度和

样例输入

7
5 3
6 2
7 2
5 3
5 4
0 4
0 6

样例输出

-2
n = int(input())
mood = 0
ans = 0
for i in range(1, n+1):
    school, others = map(int, input().strip().split())
    bad_mood = mood + school + others - 8
    mood = bad_mood
    ans += bad_mood

print(ans)

8. Aron

Aron给他的朋友们买礼物后在礼物店排队,它的前面有n个人,但是它发现有些人实在等待他的朋友而并非在排队买单,并且我们可以认为站在一个人后面的朋友都穿着匹配颜色的衬衫,而两个相邻的群体、相邻的个人或相邻的个人和一个集体将永远不会穿着相同颜色的衬衫。

编写一个程序,给定排队的人所穿的衣服的颜色,输出Aron在第多少位?

样例输入 #1

3
C
Z
P

样例输出 #1

4

样例输入 #2

6
C
C
P
C
Z
Z

样例输出 #2

5
n = int(input())
colors = []
for i in range(n):
    color = input().strip()
    if len(colors) == 0:
        colors.append(color)
    else:
        if color != colors[-1]:
            colors.append(color)
print(len(colors) + 1)

9. 询问学号

题目描述

有 n(n ≤ 2×106) 名同学陆陆续续进入教室。我们知道每名同学的学号(在 1 到 109 之间),按进教室的顺序给出。上课了,老师想知道第 i 个进入教室的同学的学号是什么(最先进入教室的同学 i=1),询问次数不超过 105 次。

输入格式

第一行 2 个整数 n 和 m,表示学生个数和询问次数。

第二行 n 个整数,表示按顺序进入教室的学号。

第三行 m 个整数,表示询问第几个进入教室的同学。

输出格式

输出 m 个整数表示答案,用换行隔开。

样例输入

10 3
1 9 2 60 8 17 11 4 5 14
1 5 9

样例输出

1
8
5
#include <stdio.h>

int main()
{
	int n, m, i;
	scanf("%d %d", &n, &m);
	char sno[n][11];
	int ask[m];
	for (i=0; i<n; i++)
	{
		scanf("%s", &sno[i]);
	}
	for (i = 0; i<m; i++)
	{
		scanf("%d", &ask[i]);
	}
	for (i=0; i<m; i++)
	{
		printf("%s\n", sno[ask[i]-1]);
	}
	return 0;
}

10. 成绩

题目描述

小奔的期末考试结束了。

他的成绩不久之后就会发下来。

给出一个考试成绩表格,例如:

科目/分值种类语文数学英语
满分100120150
实际得分9973100

当然。学校的老师认为如果录入如此多的成绩不好算分,于是他想要你的综合成绩评定

综合成绩评定指:(每一科的满分之和*3-每一科的实际得分之和*2)÷每科所扣除分数的和。

小奔想请你给出他的综合成绩,你能做到吗?

输入格式

第一行给出一个整数n(n<=1e7),表示科目的总数。
第二行n个整数ai,表示第i门课程的满分。
第三行n个整数bi,表示第i门课程小奔的实际得分。

输出格式

一行一个数,表示他的综合成绩。结果保留6位小数

样例输入

3
10 10 10
5 5 5

样例输出

4.000000
#include <stdio.h>

int main()
{
	int n;
	double total, score, sum1 = 0, sum2 = 0;
	float ans;
	scanf("%d", &n);
	for (int i=0; i<n; i++)
	{
		scanf("%lf", &total);
		sum1 += total;  // 统计科目满分
	}
	for (int i=0; i<n; i++)
	{
		scanf("%lf", &score);
		sum2 += score;	// 统计实际得分
	}
	ans = (3 * sum1 - 2 * sum2) / (sum1 - sum2);
	printf("%.6f", ans);
	return 0;
}

11. Another Cow Number Game

题目描述

奶牛们在玩一种数字游戏,Bessie 想让你帮她预测一下结果。游戏开始时,Bessie 将得到一个正整数 N。此时她的分数为 0。

奶牛们按照以下规则对 N 进行变换:

  • 如果 N 是奇数,那么将它乘以 3 后再加 1。
  • 如果 N 是偶数,那么将它除以 2。

数字每变换一次,Bessie 就得到 1 分。当 N=1 时,游戏结束。此时的分数就是她的最终得分。

输入格式

一行,一个整数 N(1 ≤ N ≤ 106)。

输出格式

一行,一个整数,为 Bessie 的最终得分。

样例输入

5

样例输出

5
n = int(input().strip())
count = 0
while n > 1:
    if n % 2 == 1:
        n = 3 * n + 1
    elif n % 2 == 0:
        n = n // 2  # 整除2
    count += 1

print(count)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦里逆天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值