欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-04-01 17:46:47
...

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上的通过率不算高。