描述
输入一个整数n,定义一个二维整型数组(n×n),初始化该数组,将数组中最大元素所在的行和最小元素所在的行对调。
输入
n×n数组元素的值由scanf函数从键盘输入
输出
将数组中最大元素所在的行和最小元素所在的行对调,并输出对调后的数组;数组按n行n列的方式输出。在每行最后一个元素输出换行。
输入样例 1
4 1 2 3 4 3 5 9 10 8 11 14 16 15 2 7 6
输出样例 1
8 11 14 16 3 5 9 10 1 2 3 4 15 2 7 6
#include<stdio.h>
int main(){
int n;
int min=0,max=0;
scanf("%d",&n);
int a[n][n];
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
scanf("%d",&a[i][j]);
}
}
for(int i=0;i<n;i++){ //判断最小和最大的值在哪
for(int j=0;j<n;j++){
if(a[i][j]>a[i][j]+1){
max=i;
}
if(a[i][j]<a[i][j]+1){
min=i;
}
}
}
int b[n][n];
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
b[i][j]=a[i][j];
}
}
if(max!=min){
for(int i=0;i<n;i++){
a[max][i]=b[min][i];
a[min][i]=b[max][i];
}
}
for(int i=0;i<n;i++){ //输出
for(int j=0;j<n;j++){
if(j==n-1){
printf("%d",a[i][j]);
}else{
printf("%d ",a[i][j]);
}
}
printf("\n");
}
}
我的代码错误的地方在于
if (a[i][j] > a[i][j] + 1) {
max = i;
}
if (a[i][j] < a[i][j] + 1) {
min = i;
}
a[i][j] + 1
只是获取了 a[i][j]
的值并加上 1,并不是与其他元素进行比较。
修改
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(a[i][j]>a[max][j]){
max=i;
}
if(a[i][j]<a[min][j]){
min=i;
}
}
}
用max和min存储i的值,然后再进行比较