pat 乙级 1008. 数组元素循环右移问题 (20)

来源:互联网 发布:oracle sql case when 编辑:程序博客网 时间:2024/05/19 15:22


思路:

具体实现 在代码里  

这里说下注意点 ; 若 M> N 需要 取 M %N ;

不然 有一个测试点 通不过 ... 


代码:


#include <stdio.h>#include <iostream>#include <cstdlib>#include <cmath>#include <cctype>#include <string>#include <cstring>#include <algorithm>#include <ctime>using namespace std;int num[105];int main() {  int N,M;cin>>N>>M;for (int i = 0; i < N; ++i){cin>>num[i];}   if (N!=M){M%=N;for (int i = N-M; i < N; ++i){cout<<num[i]<<" ";}int kong=0;for (int i = 0; i < N-M; ++i){if (kong>0){cout<<" ";}cout<<num[i];kong++;}}else {int kong=0;for (int i = 0; i < N; ++i){if (kong>0){cout<<" ";}cout<<num[i];kong++;}}return 0;}



这里再给出另外 一种 方法 :


#include <stdio.h>  int a[100];void reverse(int *a, int m, int n) {for (int i = m; i <= (m + n) / 2; i++) {int tmp = a[i];a[i] = a[m + n - i];a[m + n - i] = tmp;}}int main() {int n, m;scanf_s("%d%d", &n, &m);m %= n;for (int i = 0; i < n; i++)scanf_s("%d", &a[i]);reverse(a, 0, n - m - 1);reverse(a, n - m, n - 1);reverse(a, 0, n - 1);for (int i = 0; i < n; i++)printf("%d%s", a[i], (i - n + 1 ? " " : "\n"));return 0;}


两种方法都可以AC