题目描述:
输入一个N(N<=10)阶方阵,按照如下方式调整方阵: 1.将第一列中最大数所在的行与第一行对调。 2.将第二列中从第二行到第N行最大数所在的行与第二行对调。 依此类推... N-1.将第N-1列中从第N-1行到第N行最大数所在的行与第N-1行对调。 N.输出这个方阵
输入:包含多组测试数据,每组测试数据第一行为一个整数N,表示方阵的阶数. 接下来输入这个N阶方阵.
输出:调整后的方阵
样例输入: 4 3 6 8 7 6 7 5 3 8 6 5 3 9 8 7 2 样例输出: 9 8 7 2 6 7 5 3 3 6 8 7 8 6 5 3 来源: 2011年西北工业大学计算机研究生机试真题 #include <cstdio> #define MAXSIZE 12 using namespace std; void swap(int &a,int &b){ int temp=a; a=b; b=temp; } int main(){//下标从1开始 int buf[MAXSIZE][MAXSIZE]; int n,maxIndex; bool firstCase; while (scanf("%d",&n)!=EOF){ //input for (int i=1;i<=n;i++){ for (int j=1;j<=n;j++){ scanf("%d",&buf[i][j]); } } //initiate //process for (int j=1;j<n;j++){//处理第j列中的最大数所在行 maxIndex=j; for (int i=j;i<=n;i++){//寻找第j列中的第j行到第N行最大数的所在行 if (buf[i][j]>buf[maxIndex][j]){ maxIndex=i; } } for (int p=1;p<=n;p++){//交换两行 swap(buf[maxIndex][p],buf[j][p]); } } //output for (int i=1;i<=n;i++){ firstCase=true; for (int j=1;j<=n;j++){ if (firstCase) firstCase=false; else printf(" "); printf("%d",buf[i][j]); } printf("\n"); } } return true; }