Python习题十三


1、最大的偶数Easy

题目描述

本题目要求在给定的N个正整数A1​,A2​,…,AN​中找到它们中最大的偶数,若数组中没有偶数,请返回-1

约束:
  • 1≤N≤100
  • 1≤Ai​≤100
  • 所有的数值都是整数
函数接口定义:
def Max_Even_Number(N, nums):

其中N为数的个数,nums为数字列表,返回值为一个整数

裁判测试程序样例:

#你的答案将会被填写在这里

n = int(input())
li = list(map(int,input().split()))
print(Max_Even_Number(n, li))
样例输入1:
4
1 2 3 4
样例输出1:
4

你应该获取了四个整数 1、2 、 3、4,其中偶数有2、4
答案是 4

样例输入2:
3
1 3 5
样例输出2:
-1

你应该获取了三个整数 1、 3、5,没有偶数
答案是 -1

代码长度限制 16 KB

时间限制 400 ms

内存限制 64 MB

参考答案

def Max_Even_Number(N,nums):
    maxeven=-1
    for n in nums:
        if n %2 ==0:
            if n >maxeven:
                maxeven=n
    return maxeven

2、判断整数的各位数字是否互不相同

编写一个函数 isdif(n),用来判断参数n(n为正整数)的各位数字是否互不相同,若互不相同,则返回1,否则返回0。在主程序中调用该函数,输出结果。

函数接口定义:

在这里描述函数接口。例如:
def isdif(n):

函数的参数n是一个正整数,函数要返回1或者0。

裁判测试程序样例:

在这里给出函数被调用进行测试的例子。例如:
/* 请在这里填写答案 */
n=int(input())
if isdif(n):
    print("{}的各位数字互不相同".format(n))
else:
    print("{}的各位数字不是互不相同".format(n))

输入样例:

在这里给出第一组输入。例如:

12345

在这里给出第二组输入。例如:

13345

输出样例:

在这里给出第一组输出。例如:

12345的各位数字互不相同

在这里给出第二组输出。例如:

13345的各位数字不是互不相同

代码长度限制 16 KB

时间限制 400 ms

内存限制 64 MB

参考答案

def isdif(n):
    a=str(n)
    b=''
    for i in a:
        if i not in b:
            b+=i
        else:
            continue
    if a==b:
        return 1
    else:
        return 0

3、整数求和

题目描述

本题目要求读入正整数N,以及N个正整数A1​,A2​,…,AN​,然后输出它们的和。

约束:
  • 1≤N≤100
  • 1≤Ai​≤100
  • 所有的数值都是整数
输入:

N
A1​ A2​ … AN​

输出:

按照题目的要求输出答案

样例输入:
3
1 2 3
样例输出:
6

你应该读入了三个整数 1、2 和 3
答案是 1 + 2 + 3 = 6

代码长度限制 16 KB

时间限制 400 ms

内存限制 64 MB

参考答案

st=int(input())
n=list(map(int,input().split()))
if 1<=st<=100 and st==len(n):
    q=0
    for i in n:
        if 1<=i<=100:
            q+=i
        else:
            break
print(q)

4、IPv4地址

题目描述

本题目要求给定由4个1字节串S1​,S2​,S3​,S4​构成的IPv4地址转换成点分十进制表示

约束:
  • 保证输入符合IPv4 IP地址规范
  • Si​以字符.分割
输入:

S1​. S2​. S3​. S4​

输出:

按照题目的要求输出答案

样例输入1:
11000000.10101000.00000001.00000001
样例输出1:
192.168.1.1
样例输入2:
01111111.00000000.00000000.00000001
样例输出2:
127.0.0.1
知识补充:
  • IPv4使用32位2进制位4字节的地址,大约只有43亿个地址
  • IPv4地址通常采用点分十进制表示
  • 计算机的IP地址由两部分组成,一部分为网络位,一部分为主机位,同一网段内的计算机网络部分相同,主机部分不同同时重复出现。路由器连接不同网段,负责不同网段之间的数据转发,交换机连接的是同一网段的计算机。通过设置网络地址和主机地址,在互相连接的整个网络中保证每台主机的IP地址不会互相重叠,即IP地址具有了唯一性。

代码长度限制 16 KB

时间限制 400 ms

内存限制 64 MB

参考答案

list0=[128,64,32,16,8,4,2,1]
l1=list(map(str,input().split(".")))
s=""
for i in l1:
    a=0
    for j in range(8):
        a+=int(i[j])*list0[j]
    s+=str(a)
    s+="."
print(s[:-1])

5、红绿色盲

题目描述

小明是一个红绿色盲,现在有两条色带S1​,S2​,色带由N个涂有红色R、绿色G或者蓝色B的小格子组成

  • 红绿色盲是伴X染色体隐性遗传病,患者不能区分红色和绿色,即小明会认为RG为同一种颜色

现在一共有T组色带,对于每一组色带,请你判断小明是否会将两条色带认定为同一条

约束:
  • 2≤T≤10
  • 1≤len(Si​)≤100
  • Si​ 仅由大写英文字母 R、G、B组成
输入:

第一行输入一个正整数T
接下来2T行每两行字符串表示一组色带

输出:

对于每一组色带,如果小明会认为两条色带是同一条输出YES,否则输出NO

样例输入1:
2
R
B
RRBBGG
GRBBRR
样例输出1:
NO
YES

对于第一组色带,虽然小明分不清红色和绿色但他一定知道那不是蓝色

代码长度限制 16 KB

时间限制 400 ms

内存限制 64 MB

参考答案

y=int(input())
for i in range(y):
    st1=input()
    st2=input()
    st1=st1.replace('R','G')
    st2=st2.replace('R','G')
    if st1==st2:
        print("YES")
    else:
        print("NO")

6、重组数

题目描述

本题目要求读入三个整数a,b,c,请你判断他们是否能表示为其中一个数是另外两个数的加和。

输入:

第一行有一个整数 t (1≤t≤100),表示数据组数。
接下来 t 行 每一行都有三个整数a,b,c(0≤a,b,c≤20)

输出:

对于每一组数据,在一行中输出答案。如果可以按描述里表示,则输出YES,否则输出NO

样例输入:
3
1 2 3
2 5 8
1 4 3
样例输出:
YES
NO
YES

代码长度限制 16 KB

时间限制 400 ms

内存限制 64 MB

参考答案

tmp=int(input())
for i in range(tmp):
    a,b,c=map(int,input().split())
    if a==b+c or b==a+c or c==a+b:
        print("YES")
    else:
        print("NO")

7、递增序列

题目描述

本题目要求读入正整数N,以及N个正整数A1​,A2​,…,AN​,请你判断通过重新排序后的元素是否可以严格递增。

严格递增是指在数组a中有a1​<a2​<…<an​

约束:
  • 1≤N≤100
  • 1≤Ai​≤100
  • 所有的数值都是整数
输入:

第一行有一个整数 t (1≤t≤100),表示数据组数。
接下来 2t 行 一行为整数个数,接下来一行为一组整数,以空格分割

输出:

对于每一组数据,在一行中输出答案。如果可以按描述里表示,则输出YES,否则输出NO

样例输入:
3
4
1 1 1 1
5
8 7 1 3 4
1
5
样例输出:
NO
YES
YES

在第一个测试组中,任何排序方法都不能使array[1, 1, 1, 1]严格递增
在第二个测试组中,array[1, 3, 4, 7, 8]是严格递增的

代码长度限制 16 KB

时间限制 400 ms

内存限制 64 MB

参考答案

t=int(input())
for j in range(t):
    n=int(input())
    a=list(map(int,input().split()))
    a=sorted(a)
    for i in range(n-1):
        if a[i]>=a[i+1]:
            print("NO")
            break
    else:
        print("YES")

8、最大的偶数Medium

题目描述

本题目要求在给定的N个正整数A1​,A2​,…,AN​中任选1~2个数组成它们中所能组成最大的偶数,输出这个最大的偶数,保证数组中至少存在一个偶数。

约束:
  • 1≤N≤100
  • 1≤Ai​≤100
  • 所有的数值都是整数
输入:

N
A1​ A2​ … AN​

输出:

按照题目的要求输出答案

样例输入1:
4
1 2 3 4
样例输出1:
6

答案是 2 + 4 =6

样例输入2:
3
2 3 5
样例输出2:
8

答案是 3 + 5 = 8

样例输入3:
2
1 10
样例输出3:
10

答案是 10

代码长度限制 16 KB

时间限制 400 ms

内存限制 64 MB

参考答案

n=int(input())
a=list(map(int,input().split()))
l=[]
for i in range(n):
    if a[i]%2==0:
        l.append(a[i])
    for j in range(n):
        if i!=j and (a[i]+a[j])%2==0:
            l.append(a[i]+a[j])
print(max(l))

9、小飞棍的等边三角形

题目描述

本题目要求在给定的N个小飞棍它们的长度分别是A1​,A2​,…,AN​。
你可以执行以下操作的任意次(可能为零):

  • 选择一根棍子将他的长度增加或者减少1,每次操作后,所有小飞棍的长度都应该是正整数。

你必须执行最少执行多少次操作,才能选择其中的三根小飞棍不能折断它们并组成一个等边三角形

等边三角形是所有三个边都具有相同长度的三角形

约束:
  • 3≤N≤100
  • 1≤Ai​≤1000
  • 所有的数值都是整数
输入:

N
A1​ A2​ … AN​

输出:

按照题目的要求输出答案

样例输入1:
3
1 2 3
样例输出1:
2

你可以将第一根棍子的长度增加1,第三根棍子的长度减少1,来构成一个边长为2的等边三角形

样例输入2:
8
3 1 4 1 5 9 2 6
样例输出2:
1

你可以将第七根棍子的长度减少1,可以由第二根、第四根、第七根构成边长为1的等边三角形

代码长度限制 16 KB

时间限制 400 ms

内存限制 64 MB

参考答案

n=int(input())
lst=list(map(int,input().split()))
lst.sort()
res=lst[1]-lst[0]+lst[2]-lst[1]
for i in range(1,len(lst)-1):
    a=lst[i]-lst[i-1]+lst[i+1]-lst[i]
    if a<res:
        res=a
print(res)

10、一个!两个!蓝精灵

在广袤安宁的原始森林中,快乐的蓝精灵们正在准备一年一度的蓝月亮节。而就在这欢喜忙碌的关头,他们的宿敌——邪恶的巫师格格巫和他的宠物阿兹猫闯入了蓝精灵的秘密领地。受到惊吓的蓝精灵四散而逃,其中可怜的笨笨则盲打误撞跑进了一个神秘的山洞,山洞中的守护神告诉笨笨它喜欢排好队的小朋友,换句话说蓝精灵们只要按照从矮到高排好队就可以从山洞中通过。

现在村庄里一共有n个蓝精灵,他们的身高为1~n的整数,不存在身高相同的蓝精灵。
你可以每次任意交换队伍中的蓝精灵位置,使他们的顺序变为严格升序。请你编写程序计算最少需要交换几次才能让蓝精灵们通过山洞,躲避格格巫的追捕?

输入格式:

第一行:一个正整数n(n<1000),表示蓝精灵的数量

第二行:n个正整数,用空格分开,表示目前蓝精灵的排列情况,每一个正整数表示该位置蓝精灵的身高。

输出格式:

输出一个正整数,表示至少交换多少次,才能帮助蓝精灵们通过山洞。

输入样例:

5
3 1 2 5 4

输出样例:

3

样例说明:

交换1号蓝精灵和2号蓝精灵使队伍变成1 3 2 5 4

交换2号蓝精灵和3号蓝精灵使队伍变成1 2 3 5 4

交换4号蓝精灵和5号蓝精灵使队伍变成1 2 3 4 5

交换方法不唯一,但可以得出该交换次数是最少的

代码长度限制 16 KB

时间限制 400 ms

内存限制 64 MB

参考答案

n=int(input())
lst=list(map(int,input().split()))
count=[i for i in range(1,n+1)]
b=0
for i in range(n):
    if lst[i]!=i+1:
        for j in range(n):
            if lst[j]==i+1:
                lst[i],lst[j]=lst[j],lst[i]
                b+=1
    if lst==count:
        break
print(b)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值