- 方法1
main.cpp
#include<stdio.h>
#include<stdlib.h>
#include "shift_heard.h"
#define MAXN 100
int main()
{
int number[MAXN], N, M;
int i;
scanf_s("%d%d", &N, &M);
for (i = 0; i < N; i++)
{
scanf_s("%d", &number[i]);
}
M %= N;//当M大于等于N时转化成等价的小于N的数
for (i = 0; i < M; i++)
{
shift(number, N);
}
for (i = 0; i < N; i++)
{
printf("%d ", number[i]);
}
system("pause");
return 0;
}
shift_heard.h
#ifndef _shift_HEARD
#define _shift_HEARD
void shift(int Array[], int N);
#endif // !_shift_HEARD
shift.cpp
void shift(int Array[], int N)
{
int i, ArrayEnd;
ArrayEnd = Array[N - 1];
for (i = N - 1; i > 0; i--)
{
Array[i] = Array[i - 1];
}
Array[0] = ArrayEnd;
}
输出
- 方法2
main.cpp
#include<stdio.h>
#include<stdlib.h>
#include "shift_heard.h"
#define MAXN 100
int main()
{
int number[MAXN], N, M;
int i;
scanf_s("%d%d", &N, &M);
for (i = 0; i < N; i++)
{
scanf_s("%d", &number[i]);
}
M %= N;//当M大于等于N时转化成等价的小于N的数
shift(number, N, M);
for (i = 0; i < N; i++)
{
printf("%d ", number[i]);
}
system("pause");
return 0;
}
shift.cpp
#define swap(a,b) a^=b,b^=a,a=a^b
void shift(int Array[], int N,int M)
{
int i, j;
if (M > 0 && M < N)
{
for (i = 0, j = N - 1; i < j; i++, j--)//逆转N个数据
{
swap(Array[i], Array[j]);
}
for (i = 0, j = M-1; i < j; i++, j--)//逆转前M个数据
{
swap(Array[i], Array[j]);
}
for (i = M, j = N - 1; i < j; i++, j--)//逆转後N-M个数据
{
swap(Array[i], Array[j]);
}
}
}
shift_heard.h
#ifndef _shift_HEARD
#define _shift_HEARD
void shift(int Array[], int N,int M);
#endif // !_shift_HEARD
输出
网友评论