solution.md 1.8 KB
Newer Older
每日一练社区's avatar
每日一练社区 已提交
1 2 3 4 5 6 7 8
# 数组元素循环右移问题

题目:一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?
输入格式:
每个输入包含一个测试用例,第1行输入N(1≤N≤100)和M(≥0);第2行输入N个整数,之间用空格分隔。
输出格式:
在一行中输出循环右移M位以后的整数序列,之间用空格分隔,序列结尾不能有多余空格。
输入样例:
9 10 11 12 13 14

```json
6 2
1 2 3 4 5 6
```

每日一练社区's avatar
每日一练社区 已提交
15 16
输出样例:

17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
```json
5 6 1 2 3 4
```

以下程序实现了这一功能,请你填补空白处内容:

```cpp
#include <stdio.h>
int main()
{
    int n, m, a[1000];
    scanf("%d %d", &n, &m);
    m = m % n;
    int count = m;
    ______________
    for (int i = 0; i < count; i++)
        scanf("%d", &a[i]);
    int first = 1;
    for (int i = 0; i < n; i++)
    {
        if (!first)
            printf(" ");
        printf("%d", a[i]);
        first = 0;
    }
}
```
每日一练社区's avatar
每日一练社区 已提交
44 45 46 47

## template

```cpp
48
#include <stdio.h>
每日一练社区's avatar
每日一练社区 已提交
49 50
int main()
{
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
    int n, m, a[1000];
    scanf("%d %d", &n, &m);
    m = m % n;
    int count = m;
    while (m < n)
    {
        scanf("%d", &a[m]);
        m++;
    }
    for (int i = 0; i < count; i++)
        scanf("%d", &a[i]);
    int first = 1;
    for (int i = 0; i < n; i++)
    {
        if (!first)
            printf(" ");
        printf("%d", a[i]);
        first = 0;
    }
每日一练社区's avatar
每日一练社区 已提交
70 71 72 73 74 75
}
```

## 答案

```cpp
76 77 78 79 80
while (m < n)
{
	scanf("%d", &a[m]);
	m++;
}
每日一练社区's avatar
每日一练社区 已提交
81 82 83 84 85 86 87
```

## 选项

### A

```cpp
88 89 90 91 92
while (m < n)
{
	scanf("%d", &a[m + 1]);
	m++;
}
每日一练社区's avatar
每日一练社区 已提交
93 94 95 96 97
```

### B

```cpp
98 99 100 101 102
while (m < n)
{
	scanf("%d", &a[m]);
	m--;
}
每日一练社区's avatar
每日一练社区 已提交
103 104 105 106 107
```

### C

```cpp
108 109 110 111 112
while (m < n)
{
	scanf("%d", &a[m + 1]);
	m--;
}
每日一练社区's avatar
每日一练社区 已提交
113
```