一支军队正在进行阅兵前的训练,训练前队列排队是一个难题。该队列是一个nn的方阵,排队要求是后一排的最低的不比前一排最高的低,同时要求偶数行从小到大排列,奇数行从大到小排列(行数从第0行开始,0为偶数)。输入n及nn个身高数据(身高数据为整型),按要求处理后输出nn队列身高数据(每个身高数据占4个字符宽度)。
【输入形式】
第一行先输入n
第二行输入n个身高数据,数据与数据之间用一个空格隔开;
【输出形式】
输出一个nn的矩阵,每个身高数据占4个字符宽度
【样例输入】
3
169 158 172 177 172 172 155 165 175
【样例输出】
155 158 165
172 172 169
172 175 177
代码参考(含注释):
/*对N行N列二维数组的每一行排序,偶数行(0当作偶数)由小到大排序,奇数行由大到小排序*/
#include <stdio.h>
#define N 100
void swap(int *a,int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
void my_sort(int num,int a[][N])
{
int k = 0;
int i = 0;
int j = 0;
for(i = 0;i < num;i++)
{
if(i%2 == 0)
{
for(j = 0;j < num;j++)
{
for(k = j+1;k < num;k++)
{
if(a[i][k] < a[i][j])
{
swap(&a[i][k],&a[i][j]);
}
}
}
}
else
{
for(j = 0;j < num;j++)
{
for(k = j+1;k < num;k++)
{
if(a[i][k] > a[i][j])
{
swap(&a[i][k],&a[i][j]);
}
}
}
}
}
}
void bubble_sort(int a[], int n)
{
int i,j,temp;
for (j=0;j<n-1;j++)
{
for (i=0;i<n-1-j;i++)
{
if(a[i]>a[i+1])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
}
}
}
void repair(int num,int a[][N]){
int last =num-1;//2
int setindex=num-2;//1
int i,j,x=0,y=0;
int tmep[N];
for(i=setindex;i<num;i++){
for(j=0;j<num;j++){
tmep[x++]=a[i][j];
}
}
bubble_sort(tmep,x);
x=0;
for(i=setindex;i<num;i++){
for(j=0;j<num;j++){
a[i][j]=tmep[x++];
}
}
my_sort(num,a);
}
int main()
{
int N_line = 0;
int a[N][N] = {0};
int i = 0;
int j = 0;
scanf("%d",&N_line);
for(i = 0;i < N_line;i++)
{
for(j = 0;j < N_line;j++)
{
scanf("%d",&a[i][j]);
}
}
my_sort(N_line,a);
repair(N_line,a);
for(i = 0;i < N_line;i++)
{
for(j = 0;j < N_line;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
return 0;
}
下面是一个可以解决这个问题的 C++ 代码:
```c++
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int n;
cin >> n;
int a[n][n];
for (int i = 0; i < n * n; i++) {
cin >> a[i / n][i % n];
}
for (int i = 0; i < n; i++) {
if (i % 2 == 0) { // 偶数行
sort(a[i], a[i] + n); // 从小到大排序
} else { // 奇数行
sort(a[i], a[i] + n, greater<int>()); // 从大到小排序
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
printf("%4d", a[i][j]); // 每个身高数据占4个字符宽度
}
cout << endl;
}
return 0;
}
```
程序首先输入n,再输入n x n 个身高数据。它先将身高数据存储到二维数组中,然后对于每一行,如果该行是偶数行,则调用sort()函数从小到大排序,如果该行是奇数行,则调用sort()函数与greater()来从大到小排序。最后,它会遍历二维数组,输出每一行中的每一个身高数据。
希望这些方法能帮到您。对您有用请及时采纳。
代码流程如下:
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 110;
int n;
int a[N][N];
int main() {
// 读入 n 和 n*n 个身高数据
cin >> n;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> a[i][j];
}
}
// 对矩阵排序
for (int i = 0; i < n; i++) {
if (i % 2 == 0) {
// 偶数行从小到大排列
sort(a[i], a[i] + n);
} else {
// 奇数行从大到小排列
sort(a[i], a[i] + n, greater<int>());
}
}
// 输出矩阵
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cout << a[i][j] << " ";
}
cout << endl;
}
return 0;
}