题目
从标准输入读入一个长度为 n 的数组和一个非负整数 k,将数组元素循环向左移动 k 个位置后输出。
输入格式:第一行输入整数 n 和移位数 k;第二行输入 n 个整数。
输出格式:在一行中输出循环左移后的数组,元素以空格分隔,末尾换行。
数据范围与约定:1 ≤ n ≤ 1000,0 ≤ k ≤ 106。
思路与算法
1. 模运算化简
移动位数先取模 k %= n,避免冗余的整轮移位。
2. 切片拼接
Pythonic 方式:a[k:] + a[:k],简洁高效地完成循环移位重组。
完整程序
a = int(input())
n = int(input())
# 累加 Sn = a + aa + aaa + ...
total = 0
cur = 0
for _ in range(n):
cur = cur * 10 + a
total += cur
print(total)运行示例
输入:
5 2
1 2 3 4 5输出:
3 4 5 1 2其它写法
下面每种写法都是完整程序,输入输出格式与正文一致,便于对照。
三次反转
程序:
#!/usr/bin/python3
# coding=utf-8
def rev(a, l, r):
while l < r:
a[l], a[r] = a[r], a[l]
l += 1
r -= 1
n, k = map(int, input().split())
a = list(map(int, input().split()))
k %= n
rev(a, 0, n - 1)
rev(a, 0, k - 1)
rev(a, k, n - 1)
print(" ".join(map(str, a)))输入:
5 2
1 2 3 4 5输出:
3 4 5 1 2