二维数组独立编程问题

输入一个正整数n(1≤n≤6)和n阶方阵A,交换方阵A中的最大值与最小值位置。假定方阵A中的最大值与最小值都唯一。

源代码:

import java.util.Scanner;
public class 交换数组最大值和最小值 {
    public static void main(String[] args) {
        System.out.println("输入你需要的阶层数:");
        Scanner scan = new Scanner(System.in);
        int n=scan.nextInt();//定义需要的阶层数n
        int[][]array=new int[n][n];//定义一个n*n的数组array
        int Max, Min;//接受最大值和最小值
        int maxi = 0 ,maxj = 0 ,mini=0,minj=0;//存放最大值和最小值的元素下标
        int temp;//存放交换最大值和最小值时的临时变量
        System.out.println("输入数组的各个元素:");
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++){
                array[i][j]=scan.nextInt();//给数组赋值
            }
        }
        System.out.println("你输入的数组为:");
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {

                System.out.print(array[i][j]+"\t");
                if(j==n-1)
                    System.out.println();
            }
        }
        Max=Min=array[0][0];
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
                if(array[i][j]>Max)
                    Max=array[i][j];//获得数组中的最大值
                if(array[i][j]<Min)
                    Min=array[i][j];//获得数组中的最小值
            }
        }
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
                if(array[i][j]==Max)
                {
                    maxi=i;
                    maxj=j;
                }
                if(array[i][j]==Min)
                {
                    mini=i;
                    minj=j;
                }
            }
        }
        temp=array[maxi][maxj];
        array[maxi][maxj]=array[mini][minj];
        array[mini][minj]=temp;
        System.out.println("交换最大值和最小值后的数组为:");
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {

                System.out.print(array[i][j]+"\t");
                if(j==n-1)
                    System.out.println();
            }
        }
    }

}

刚刚写的,都有备注,要是不懂就问我。

追问

额,不好意思啊,我只学过C ,看不懂这个算法,能用C写么,让你码这么多真是辛苦了

追答

我没有学过c,学过c++不过现在不怎么用也快忘了。但是原理应该是通的,像java里面的输入数组元素是next.int(),c里面就是
printf("请输入:\n");

for(i=0;i<n;i++)
for(j=0;j<n;j++)

scanf("%d",&a[i][j]);
还有输出 System.out.println("交换最大值和最小值后的数组为:");就换成

printf("输出为:\n");

for(i=0;i<n;i++)
for(j=0;j<n;j++)

scanf("%d",a[i][j]);
主要的代码基本不需要变得。

追问

好的谢谢

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-12-10
int swap(int* A, int n)

{
      int max_x, max_y, min_x, min_y;
      int i, j;
      max_x = max_y = min_x = min_y=0;
      for (i=0; i < n; i ++)
      {
            for (j = 0; j < n; j ++)
            {
                 if (A[i][j] > A[max_x][max_y] )
                  {
                        max_x = i, max_y = j;
                   }
                    else if (A[i][j]  <  A[min_x][min_y] )
                    {

                         min_x = i, min_y = j;
                     }
             }

             A[max_x][max_y] = A[max_x][max_y] ^ A[min_x][min_y];
             A[min_x][min_y]  = A[max_x][max_y] ^ A[min_x][min_y];
             A[max_x][max_y] = A[max_x][max_y] ^ A[min_x][min_y];
          return 0;
      }

相似回答
大家正在搜