📌  相关文章
📜  国际空间研究组织 | ISRO CS 2014 |问题 68(1)

📅  最后修改于: 2023-12-03 14:50:47.101000             🧑  作者: Mango

国际空间研究组织 | ISRO CS 2014 |问题 68

题目描述

给定一个长度为n的数组,其中的元素为a[0],a[1],a[2],....,a[n-1]。你需要将这个数组视为环状数组。也就是说,最后一个元素a[n-1]的下一个元素是a[0],同时,第一个元素a[0]的前一个元素是a[n-1]。你需要输出数组中任意一元素在环状数组中的下一个元素以及上一个元素。

输入格式

第一行输入一个正整数T,表示测试用例的数量。 对于每个测试用例, 第一行输入一个正整数n,表示数组的长度。 第二行包含n个以空格分隔的整数a[0],a[1],a[2],....,a[n-1]。

输出格式

对于每个测试用例,分别输出一行。输出格式为“a[i]的下一个元素是a[x],上一个元素是a[y]”。如果a[i]没有上一个元素或下一个元素,则输出“no previous element”或“no next element”。

示例

输入:

2
4
1 2 3 4
6
5 -10 5 8 -5 2

输出:

a[0]的下一个元素是a[1],上一个元素是a[3]。
a[3]的下一个元素是a[0],上一个元素是a[2]。
a[0]的下一个元素是a[1],上一个元素是a[5]。
a[5]的下一个元素是a[0],上一个元素是a[4]。
解题思路

题目需要我们将数组看作是一个环,因此我们考虑通过取模的方式解决。在计算下一个元素时,我们只需要将当前元素的下标加一,并对长度取模即可。类似地,在计算上一个元素时,我们只需要将当前元素的下标减一,并对长度取模即可。

需要注意的一点是,如果当前数组长度为1,则下一个元素与上一个元素都不存在。

参考代码
for _ in range(int(input())):
    n = int(input())
    a = list(map(int, input().split()))
    
    for i in range(n):
        prev = a[(i - 1) % n]
        nxt = a[(i + 1) % n]
        
        print(f'a[{i}]的下一个元素是a[{(i + 1) % n}],上一个元素是a[{(i - 1) % n}]' if n > 1 else 'no previous element\nno next element')