有 n个整数,使其前面各数顺序向后移 m 个位置,最后m个数变成最前面的 m 个数。- 多语言
目录
题目:有 n个整数,使其前面各数顺序向后移 m 个位置,最后m个数变成最前面的 m 个数。
程序分析:无。
C 语言实现
包含了输入数组大小、数组内容、滚动偏移量
#include <stdio.h>
#include <stdlib.h>
// 函数声明
void print_arr(int array[], int n);
void move(int array[], int n, int offset);
int main() {
int arr[20];
int i, n, offset;
// 输入数组大小和数组内容
printf("Total numbers?\n");
scanf("%d", &n);
printf("Input %d numbers:\n", n);
for (i = 0; i < n; i++)
scanf("%d", &arr[i]);
// 输入滚动偏移量
printf("Set your offset:\n");
scanf("%d", &offset);
printf("Offset is %d.\n", offset);
// 打印滚动前数组
printf("Array before rolling:\n");
print_arr(arr, n);
// 滚动数组并打印
move(arr, n, offset);
printf("Array after rolling:\n");
print_arr(arr, n);
return 0;
}
// 打印数组
void print_arr(int array[], int n) {
int i;
for (i = 0; i < n; ++i)
printf("%4d", array[i]);
printf("\n");
}
// 滚动数组
void move(int array[], int n, int offset) {
// 处理负偏移量和大于数组大小的偏移量
offset = offset % n; // 确保偏移量在有效范围内
if (offset < 0) {
offset += n; // 将负偏移量转换为正偏移量
}
int *p, *arr_end;
arr_end = array + n; // 数组最后一个元素的下一个位置
int last;
// 滚动直到偏移量为0
while (offset) {
last = *(arr_end - 1); // 保存最后一个元素
for (p = arr_end - 1; p != array; --p) // 向右滚动一位
*p = *(p - 1);
*array = last; // 将最后一个元素放到数组的开头
--offset; // 减少偏移量
}
}
- 输入部分:程序首先询问用户输入数组的大小和内容,然后输入滚动的偏移量。
- 打印数组:
print_arr
函数用于打印数组的内容。 - 滚动数组:
move
函数实现了数组的滚动操作。它首先处理负偏移量和大于数组大小的偏移量,然后通过循环将数组元素向右滚动。 - 主函数:在
main
函数中,调用上述函数来实现功能。
Python 实现
输入数组的大小和内容,输入滚动偏移量,并打印滚动前后的数组。
def print_arr(array):
"""打印数组"""
for num in array:
print(f"{num:4}", end=' ')
print()
def move(array, offset):
"""滚动数组"""
n = len(array)
# 处理负偏移量和大于数组大小的偏移量
offset = offset % n # 确保偏移量在有效范围内
if offset < 0:
offset += n # 将负偏移量转换为正偏移量
# 向右滚动数组
return array[-offset:] + array[:-offset]
def main():
# 输入数组大小和数组内容
n = int(input("Total numbers?\n"))
arr = []
print(f"Input {n} numbers:")
for _ in range(n):
arr.append(int(input()))
# 输入滚动偏移量
offset = int(input("Set your offset:\n"))
print(f"Offset is {offset}.\n")
# 打印滚动前数组
print("Array before rolling:")
print_arr(arr)
# 滚动数组并打印
arr = move(arr, offset)
print("Array after rolling:")
print_arr(arr)
if __name__ == "__main__":
main()
print_arr
函数:用于打印数组的内容,格式化输出每个元素。move
函数:实现了数组的滚动操作。它首先处理负偏移量和大于数组大小的偏移量,然后通过切片操作将数组元素向右滚动。main
函数:用于接收用户输入,创建数组并调用move
函数来实现滚动功能。
Java 实现
输入数组的大小和内容,输入滚动偏移量,并打印滚动前后的数组。
import java.util.Scanner;
public class ArrayRoller {
// 打印数组
public static void printArr(int[] array) {
for (int num : array) {
System.out.printf("%4d", num);
}
System.out.println();
}
// 滚动数组
public static int[] move(int[] array, int offset) {
int n = array.length;
// 处理负偏移量和大于数组大小的偏移量
offset = offset % n; // 确保偏移量在有效范围内
if (offset < 0) {
offset += n; // 将负偏移量转换为正偏移量
}
// 创建新的数组并进行滚动
int[] result = new int[n];
for (int i = 0; i < n; i++) {
result[i] = array[(i - offset + n) % n];
}
return result;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 输入数组大小和数组内容
System.out.println("Total numbers?");
int n = scanner.nextInt();
int[] arr = new int[n];
System.out.printf("Input %d numbers:\n", n);
for (int i = 0; i < n; i++) {
arr[i] = scanner.nextInt();
}
// 输入滚动偏移量
System.out.println("Set your offset:");
int offset = scanner.nextInt();
System.out.printf("Offset is %d.\n", offset);
// 打印滚动前数组
System.out.println("Array before rolling:");
printArr(arr);
// 滚动数组并打印
arr = move(arr, offset);
System.out.println("Array after rolling:");
printArr(arr);
scanner.close();
}
}
printArr
方法:用于打印数组的内容,格式化输出每个元素。move
方法:实现了数组的滚动操作。它首先处理负偏移量和大于数组大小的偏移量,然后通过计算新的索引来创建一个新的数组。main
方法:用于接收用户输入,创建数组并调用move
方法来实现滚动功能。
Js 实现
输入数组的大小和内容,输入滚动偏移量,并打印滚动前后的数组。
function printArr(array) {
// 打印数组
console.log(array.join(' '));
}
function move(array, offset) {
const n = array.length;
// 处理负偏移量和大于数组大小的偏移量
offset = offset % n; // 确保偏移量在有效范围内
if (offset < 0) {
offset += n; // 将负偏移量转换为正偏移量
}
// 创建新的数组并进行滚动
const result = new Array(n);
for (let i = 0; i < n; i++) {
result[i] = array[(i - offset + n) % n];
}
return result;
}
function main() {
const prompt = require('prompt-sync')(); // 使用 prompt-sync 库来获取用户输入
// 输入数组大小和数组内容
const n = parseInt(prompt("Total numbers?\n"), 10);
const arr = [];
console.log(`Input ${n} numbers:`);
for (let i = 0; i < n; i++) {
arr.push(parseInt(prompt(), 10));
}
// 输入滚动偏移量
const offset = parseInt(prompt("Set your offset:\n"), 10);
console.log(`Offset is ${offset}.\n`);
// 打印滚动前数组
console.log("Array before rolling:");
printArr(arr);
// 滚动数组并打印
const rolledArr = move(arr, offset);
console.log("Array after rolling:");
printArr(rolledArr);
}
main();
printArr
函数:用于打印数组的内容,使用join
方法将数组元素连接成字符串。move
函数:实现了数组的滚动操作。它首先处理负偏移量和大于数组大小的偏移量,然后通过计算新的索引来创建一个新的数组。main
函数:用于接收用户输入,创建数组并调用move
函数来实现滚动功能。
原文地址:https://blog.csdn.net/xinfanyyds/article/details/144357884
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!