题目
思路:
1,定义变量m,n,用于后面对数组的处理。给出空间用于存储。
2,定义变量a,再用循环语句记录并存储各位数字。
3,将数组分两类处理,分别进行排序输出。
两类数字的处理
1,对于在第n-m个数字后,将后面的数组调到前面输出。
2,对于剩下的另外一组放在后面输出。
注意:
1,对m<n的情况要注意处理。
2,对最后输出的数字没有空格要单独做处理。
代码展示:
#include <iostream>
using namespace std;
int main()
{
int n,m,i; //定义n,m用于输入和下面利用
cin>>n>>m;
int a[n];
m=m%n; //处理m>n可能存在的情况
for(i=0;i<n;i++) //依次录入并存储各个数字
cin>>a[i];
for(i=n-m;i<n;i++) //对第一类数字进行先输出
printf("%d ",a[i]);
for(i=0;i<n-m;i++) //对第二类数字进行输出
{
printf("%d",a[i]);
if(i!=n-m-1) //用于处理最后一个数字的特殊情况
printf(" ");
}
return 0;
}
注:本题题目要求只能使用一个数组,下代码用了两个数组进行排序,仅供理解与参考。
#include<cstdio>
#include<iostream>
using namespace std;
int main()
{
int n,a[101],m,j=1,b[101];
cin>>n>>m;
m=m%n;
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
for(int i=1;i<=n;i++)
{
if(i+m<=n) //将a中顺序不同的数字在b中按1,2,3...的顺序输出
b[i+m]=a[i];
else{
b[j]=a[i];
j++;
}
}
for(int i=1;i<=n-1;i++) //对最后一个数字不处理
printf("%d ",b[i]);
printf("%d",b[n]); //最后处理最后一个数字
return 0;
}