所以这应该在2D数组中找到最大值和最小值并交换它们的位置,如果对应关系是2x2数组的1234,它应该是4231。 这是我做的:
void interchange (int a[][n],int m) {
int i,j;
int cmin,cmax,rmin,rmax,temp;
int max=a[0][0],min=a[0][0];
for(i = 0; i < m; i++) {
for(j = 0; j < n; j++) {
if (a[i][j]<min) {
rmin=i;
cmin=j;
min=a[i][j];
} else if (a[i][j]>max) {
rmax=i;
cmax=j;
max=a[i][j];
}
temp=a[cmin][rmin];
a[cmin][rmin]=a[cmax][rmax];
a[cmax][rmax]=temp;
}
}
}
我使用另一个函数来打印旧的和新的数组,但它总是打印旧的数组,当我尝试在交换函数中打印以查看发生的情况时,它会输出零。
if..if else语句部分,我认为这样会更有效:
if (a[i][j]<min) {
rmin = i;
cmin = j;
min = a[rmin][cmin];
}
...但它仍然有同样的问题。这是整个代码:
#include<iostream.h>
const int n = 2;
const int m = 2;
void read(int a [][n], int m);
void write(int a [][n], int m);
void interchange(int a [][n], int m);
main(){
int a[n][m];
read(a, m);
write(a, m);
interchange(a, m);
write(a, m);
return 0;
}
void read(int a [][n], int m){
int i, j;
for (i = 0; i < m; i++)
for (j = 0; j < n; j++)
cin >> a[i][j];
}
void write(int a [][n], int m){
int i, j;
for (i = 0; i < m; i++){
for (j = 0; j < n; j++)
cout << a[i][j] << "\t";
cout << endl;
}
}
void interchange(int a [][n], int m){
int i, j;
int cmin, cmax, rmin, rmax, temp;
int max = a[0][0], min = a[0][0];
for (i = 0; i < m; i++){
for (j = 0; j < n; j++)
if (a[i][j] < min){
rmin = i;
cmin = j;
min = a[rmin][cmin];
}
else if (a[i][j] > max){
rmax = i;
cmax = j;
max = a[rmax][cmax];
}
temp = a[cmin][rmin];
a[cmin][rmin] = a[cmax][rmax];
a[cmax][rmax] = temp;
}
}
答案 0 :(得分:2)
您的代码中存在很少问题。
使用适当的索引..不要混合列和行索引
void interchange (int a[][n],int m) {
int i,j;
int cmin=0,cmax=0,rmin=0,rmax=0,temp;
int max=a[0][0],min=a[0][0];
for(i = 0; i < m; i++) {
for(j = 0; j < n; j++) {
if (a[i][j]<min) {
rmin=i;
cmin=j;
min=a[i][j];
}
if (a[i][j]>max) {
rmax=i;
cmax=j;
max=a[i][j];
}
}
}
temp=a[rmin][cmin];
a[rmin][cmin]=a[rmax][cmax];
a[rmax][cmax]=temp;
}