方法一:这种题目,其实可以不用管题目中那些限制,直接输出答案即可。 亮点1:用m %= n;修正m,使m<n。 亮点2:用count统计输出的个数,只要count没有达到N,就输出空格。
#include<cstdio>
int a[105] = {0};
int main(){
int n,m,count = 0;
scanf("%d%d",&n,&m);
m %= n;
for(int i = 0; i < n; i++){
scanf("%d",&a[i]);
}
for(int i = n - m; i < n; i++){
printf("%d",a[i]);
count++;
if(count < n){
printf(" ");
}
}
for(int i = 0; i < n - m; i++){
printf("%d",a[i]);
count++;
if(count < n){
printf(" ");
}
}
return 0;
}
方法二:满分通过
#include<cstdio>
int a[105] = {0};
int main(){
int i,j,n,m;
scanf("%d%d",&n,&m);
for(i = 0; i < n; i++){
scanf("%d",&a[i]);
}
for(i = 0; i < m; i++){
int temp = a[n - 1];
for(j = n - 1; j > 0; j--){
a[j] = a[j - 1];
}
a[0] = temp;
}
for(i = 0; i < n; i++){
if(i != 0){
printf(" ");
}
printf("%d",a[i]);
}
printf("\n");
return 0;
}
方法三:得分18分,有一个测试用例未通过(哪位大神看到了,帮我指出怎么改能满分,拜托了)
#include<cstdio>
int a[105] = {0};
void swap(int i, int j){
int t = a[i];
a[i] = a[j];
a[j] = t;
}
int main(){
int n,m;
scanf("%d%d",&n,&m);
m %= n;
for(int i = 0; i < n; i++){
scanf("%d",&a[i]);
}
for(int i = n - m - 1; i >= 0; i--){
swap(i, i + m);
}
for(int i = 0; i < n; i++){
if(i != 0){
printf(" ");
}
printf("%d",a[i]);
}
return 0;
}
方法四:移动次数最少
#include<cstdio>
int gcd(int a,int b){
if(b == 0){
return a;
}
else return gcd(b,a%b);
}
int main(){
int a[110];
int n,m,temp,pos,next;
scanf("%d%d",&n,&m);
for(int i = 0; i < n; i++){
scanf("%d",&a[i]);
}
m %= n;
if(m != 0){
int d = gcd(m,n);
for(int i = n - m; i < n - m + d; i++){
temp = a[i];
pos = i;
do{
next = (pos - m + n) % n;
if(next != i) a[pos] = a[next];
else a[pos] = temp;
pos = next;
}while(pos != i);
}
}
for(int i = 0; i < n; i++){
printf("%d",a[i]);
if(i < n -1){
printf(" ");
}
}
return 0;
}
方法五: 目标:AB->BA AB->对AB分别反转,得到A’B’ A’B’->对A’B’整体反转即得到BA
#include<cstdio>
int a[105] = {0};
void reverse(int start, int end){
for(;start<end;start++,end--){
int t = a[start];
a[start] = a[end];
a[end] = t;
}
}
int main(){
int n,m,count = 0;
scanf("%d%d",&n,&m);
m %= n;
for(int i = 0; i < n; i++){
scanf("%d",&a[i]);
}
reverse(0,n-m-1);
reverse(n-m,n-1);
reverse(0,n-1);
for(int i = 0; i < n; i++){
if(i != 0){
printf(" ");
}
printf("%d",a[i]);
}
return 0;
}
|