【每日编程-424期】西安电子科技大学上机题(三)
请写一个程序,对于一个m行m列的(1<m<10)的方阵,求其每一行,每一列及主对角线元素之和,最后按照从大到小的顺序依次输出。输入说明:共一组数据,输入的第一行为一个正整数,表示m,接下来的m行,每行m个整数表示方阵元素。
输入格式:
输入一个数字方阵。
输出格式:
从大到小排列的一行整数,每个整数后跟一个空格,最后换行。
输入样例:
3
1 2 3
4 5 6
7 8 9
输出样例:
24 18 15 15 15 12 6
解决方法:
(1)代码实现:
#include <stdio.h>void sort(int *a, int l) //a为数组地址,l为数组长度。{ int i, j; int v; //排序主体 for (i = 0; i < l - 1; i++) for (j = i + 1; j < l; j++) { if (a[i] > a[j]) //如前面的比后面的大,则交换。 { v = a[i]; a[i] = a[j]; a[j] = v; } }}main(){ printf("请输入方阵的行数(列数):\n"); int x; scanf("%d", &x); printf("\n请输入方阵元素:\n"); int a[x][x]; int i = 0, j = 0; while (i < x) { j = 0; while (j < x) { scanf("%d", &a[i][j]); ++j; } ++i; } int b[2 * x + 1]; for (i = 0; i < 2 * x + 1; ++i) { b[i] = 0; } for (i = 0; i < x; ++i) { for (j = 0; j < x; ++j) { b[i] = b[i] + a[i][j]; } } for (i = 0; i < x; ++i) { for (j = 0; j < x; ++j) { b[i + x] = b[i + x] + a[j][i]; } } for (i = 0; i < x; ++i) { b[2 * x] = b[2 * x] + a[i][i]; } sort(b, 2 * x + 1); printf("\n输出结果:\n"); for (i = 2 * x; i >= 0; --i) { printf("%d ", b[i]); }}对于给定的字符序列,从左至右将所有的数字字符取出拼接成一个无符号整数(字符序列长度小于100,拼接出的整数小于2^31,),计算并输出该整数的最大因子(如果是素数,则其最大因子为自身)。
输入格式:
有多组数据,输入数据的第一行为一个正整数,表示字符序列的数目,每组数据为一行字符序列。
输出格式:
对每个字符序列,取出所得整数的最大因子,若字符序列中没有数字或者找出的整数为0,则输出0,每个整数占一行输出。
输入样例:
2qwq243dnh5
输出样例:
127
赞 (0)
