注意:
1.题目中没说m的范围,所以m=n;m>n;m<n;
所以,要确定m的值:m=m%n
2.题目中要求“不允许使用另外数组前提下”和“”次数尽量少?
可当没看见!!!
图解过程:
思路1:
1.按顺序输出
2.用另一数组b[n]存储,作为中间变量,a[n]前面的改了,a[n]就改了,所以找新的数组进行存储!
(这里题目中说不能取新的数组,可以忽略不计!)
代码1:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
int m;
cin>>n>>m;
m=m%n;//!!!!!
int a[n];
int b[n];
for(int i = 0; i < n; i++){
cin>>a[i];
b[i]=a[i];
}
//先输出前m个数
for(int i = 0; i < m; i++){
a[i]=a[i+n-m];
}
//输出后n-m个数
int j = 0;
for(int i = m; i < n; i++){
a[i]=b[j];
j++;
}
//输出
for(int i = 0; i < n; i++){
cout<<a[i];
//!!!!
if(i<n-1)
cout<<" ";
}
return 0;
}
思路2:
1.需要什么就输出什么,分为前面和后面。
2.需要注意for循环中i的起始位置,i代表的是输出位置,不一定就是从头开始,思维不要局限了;
需要哪里就用哪里`for(int i = n-m; i < n; i++)`
3.输出不一定就要从数组的开头第一位才输出。
4.用后面的输出前几位
代码2:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
int m;
scanf("%d%d",&n,&m);
//1.m=0;m<n;m>n
m=m%n;
int a[n];
for(int i = 0; i < n; i++){
cin>>a[i];
}
for(int i = n-m; i < n; i++){
cout<<a[i]<<" ";
}
for(int i = 0; i < n-m; i++){
cout<<a[i];
if( i < n-m-1){
//2.注意下标
cout<<" ";
}
}
return 0;
}
Tips:
1.空格多输出问题?
if(i<n-1) cout<<" ";
保证最后一个数字不输出空格
2.另开数组作中间存储变量
3.m=m%n,考虑m=0;m<n;m>n
4.题目中说不能另开数组,或者循环次数较小,可以不予考虑!!!