-
题目描述:
-
输入一个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
-
-
源码如下:
题目挺简单的,主要是看能否把题目分歧清楚。一开始有些想的多了,从for i 开始循环。#include<stdio.h> #include<stdlib.h> #include<limits.h> int main() { int a[10][10]; int num, i, j, MAX, temp; int big_line; while (scanf("%d", &num) != EOF) //可以输入多组数据 { for (i = 0; i < num; i++) //输入数据 { for (j = 0; j < num; j++) { scanf("%d", &a[i][j]); } } for (j = 0; j < num; j++) //对每列开始循环 { MAX = INT_MIN; for (i = j; i < num; i++)//每次从对角线元素向下开始比较 { if (a[i][j] > MAX) { MAX = a[i][j]; big_line = i; //find the line of the biggest number } } if (big_line != j) //If the first line has the biggest number,then just leave it,and compare next row. { for (int q = 0; q < num; q++) { temp = a[big_line][q]; a[big_line][q] = a[j][q]; a[j][q] = temp; } } } for (i = 0; i < num; i++)//交换 { for (j = 0; j < num - 1; j++) { printf("%d ", a[i][j]); } printf("%d\n", a[i][j]); } } return 0; } /************************************************************** Problem: 1470 User: riseofchen Language: C Result: Accepted Time:0 ms Memory:912 kb ****************************************************************/
-
另外掌握了 为了多组循环使用 while(scanf("%d",&num)!=EOF),这也是一开始一直过不了的原因。
-
精简版的代码如下:
-
#include<stdio.h> #include<string.h> int main() { char a[200],b[200]; while(scanf("%s%s",a,b)!=EOF) { int st1=strlen(a),st2=strlen(b); int i1=0,i2=st2-1; while(i1<st1||i2>=0) //不需要存入一个数组,直接就输出,还是考虑到了输入的两个数组不等长的情况 { if(i1<st1&&i2>=0) printf("%c%c",a[i1++],b[i2--]); else if(i1==st1) printf("%c",b[i2--]); else if(i2<0) printf("%c",a[i1++]); } printf("\n"); } return 0; }