矩阵(1)

【1】矩阵的转置

#include <stdio.h>

int main() {
	int m, n, i, j, flag;
	while (scanf("%d%d", &n, &m) != EOF) {
		int a[2000];
		for (i = 0; i < m * n; i++) {
			scanf("%d", &a[i]);
		}
		for (i = 0; i < m; i++) {
			for (j = i; j <= i + m * (n - 1); j = j + m) {
				printf("%d ", a[j]);

			}
			printf("\n");
		}

	}
	return 0;
}

【2】输出n*m的矩阵,要求左上角元素是1,然后从左到右 从上到下依次增大

注意m与n不要搞混

#include <stdio.h>

int main() {
	int m, n, i, j, flag;
	while (scanf("%d%d", &n, &m) != EOF) {
		for (i = 1; i <= 1 + m * (n - 1); i = i + m) {

			for (j = i; j < i + m; j++) {
				printf("%d ", j);
			}
			printf("\n");
		}
	}
	return 0;
}

【3】输出n*m的弓型矩阵,要求左上角元素是1,(每个元素占2个位置,靠右)

输入

4 3

输出

 1  2  3
 6  5  4
 7  8  9
12 11 10

左对齐与右对齐:只需在%d中间加上位数,比如%2d,多出的部分不会被截断。

#include <stdio.h>

int main() {
	int m, n, i, j, flag;
	while (scanf("%d%d", &n, &m) != EOF) {
		for (i = 1; i <= 1 + m * (n - 1); i = i + m) {
			if ((i - 1) / m % 2 == 0) {
				for (j = i; j < i + m; j++) {
					printf("%2d ", j);
				}
			} else {
				for (j = i + m - 1; j >= i; j--) {
					printf("%2d ", j);
				}
			}


			printf("\n");


		}
	}
	return 0;
}

【4】输入一个m×n的矩阵,计算每行的和。将行号最高的行与矩阵的第一行进行位置交换,输出调整后的矩阵以及每行的和。

土办法不行了,学习了一下二维数组。

#include <stdio.h>

int main() {
	int n, m, a[10][10], i, j, sum[10], k;
	while (scanf("%d%d", &m, &n) != EOF) {
		for (i = 0; i < m; i++) {
			sum[i] = 0;
			for (j = 0; j < n; j++) {
				scanf("%d", &a[i][j]);
				sum[i] += a[i][j];
			}
		}
		for (i = 0; i < m; i++) {
			if (i == 0) {
				k = m - 1;
			} else if (i == m - 1) {
				k = 0;
			} else {
				k = i;
			}
			printf("%d", a[k][0]);
			for (j = 1; j < n; j++) {
				printf(" %d", a[k][j]);
			}
			printf(" %d\n", sum[k]);
		}
	}
	return 0;
}

【5】输入数据包含多个测试实例,每个测试实例的输入只包含一个正整数n(1<=n<=30),表示将要输出的杨辉三角的层数。

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1

对应于每一个输入,请输出相应层数的杨辉三角,每一层的整数之间用一个空格隔开,每一个杨辉三角后面加一个空行。

1.先给数组初始化成0:不太懂为什么oj平台上对 int a[n][n] = {0};报编译错误。只能先改成for语句一个一个赋值。

2.将第一列和行标列标相等的数组赋值成1。剩下的加法运算。

#include <stdio.h>

int main() {
	int n, i, j;

	while (scanf("%d", &n) != EOF) {
		int a[n][n];
		for (i = 0; i < n; i++) {
			for (j = 0; j < n; j++) {
				a[i][j] = 0;
			}
		}
		for (i = 0; i < n; i++) {
			for (j = 0; j <= i; j++) {
				if (j == 0 || i == j) {
					a[i][j] = 1;
				} else {
					a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
				}
			}
		}
		for (i = 0; i < n; i++) {
			for (j = 0; j <= i; j++) {
				printf("%d ", a[i][j]);
			}
			printf("\n");
		}
		printf("\n");
	}
	return 0;
}

【6】输入一个正整数n(1<= n <= 6)和n阶方阵a中的每一个元素,如果找到a的鞍点(鞍点的元素值在该行上最大,在该列上最小),就输出它的下标,否则输出“NO”(设a最多只有一个鞍点)。

#include <stdio.h>

int main() {
	int n, i, j, max, x, y, flag, k;
	while (scanf("%d", &n) != EOF) {
		int a[n][n];
		for (i = 0; i < n; i++) {
			for (j = 0; j < n; j++) {
				scanf("%d", &a[i][j]);
			}
		}
		for (i = 0; i < n ; i++) {
			max = a[i][0];
			flag = 1;
			for (j = 1; j < n; j++) {
				if (a[i][j] > max) {
					max = a[i][j];
					x = i;
					y = j;
				}
			}
			for (k = 0; k < n && flag == 1; k++) {
				if (a[k][y] < max) {
					flag = 0;
				}
			}
			if (flag == 1) {
				printf("%d %d\n", x, y);
				break;
			}
		}
		if (flag == 0) {
			printf("NO\n");
		}
	}
	return 0;
}

 代码运行错误。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值