Python入门习题(72)——OpenJudge百练习题:判断是否可以构成等差数列

OpenJudge百练第4068号习题:判断是否可以构成等差数列

题目描述

来源
OpenJudge网站百练习题集-第4068号习题

要求
总时间限制: 1000ms 内存限制: 65536kB

描述

有一组未排序整数,判断这组数字是否可以构成等差数列。如4 8 6这几个数字可以构成一个4 6 8的等差数列。

输入
第一行是一个正整数N(1<=N<=100),表示下面需要检测的数组的个数。其后有N行,每行有若干个数字,米格数字间由空格隔开。
输出
有N行,每行对应输入的一个数组,如果该数组可以构成等差数列,则该行输出True,否则输出False。
样例输入
2
4 8 6
3 3 2
样例输出
True
False

解题思路

  1. 这一题的一个坑是,如果一行数字只有两个,视为构成等差数列。
  2. 判别一行整数是否构成等差数列的做法是:对该行整数排序,然后看相邻两个数的差是否相等。

参考答案

N = int(input())
for i in range(N):
    ds = [int(s) for s in input().strip().split()]
    if len(ds) <= 2:
        print("True")  #有点不合常理
        continue

    ds.sort()
    deltas = [ds[i] - ds[i-1] for i in range(1, len(ds))]  #相邻两个数的差组成列表
    for j in range(1, len(deltas)):
        if deltas[j] != deltas[0]:
            print("False")  #有不相等的
            break
    else:
        print("True")  #全部相等

测试用例

  1. 题目描述给出的测试用例包含了是等差数列和不是等差数列的情形。

  2. 一行数字只有两个,视为构成等差数列。
    样例输入
    1
    4 8
    样例输出
    True

  3. 全部数字相同的情形。N=1的边界情形。
    样例输入
    1
    4 4 4 4
    样例输出
    True

小结

  1. 这一题的一个坑是,如果一行数字只有两个,视为构成等差数列。
  2. 这道题难度不大。由于上面的坑,所以在OpenJudge上的通过率不算高。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值