您的位置:首页 > 健康 > 美食 > web前端开发工程师发展前景_商标号在线查询_西安seo培训_seo网站关键字优化

web前端开发工程师发展前景_商标号在线查询_西安seo培训_seo网站关键字优化

2025/3/29 11:13:24 来源:https://blog.csdn.net/qq_41840843/article/details/144153859  浏览:    关键词:web前端开发工程师发展前景_商标号在线查询_西安seo培训_seo网站关键字优化
web前端开发工程师发展前景_商标号在线查询_西安seo培训_seo网站关键字优化

一本通 例8.7 行列转换问题

      • C语言代码
      • C++ 代码
      • Java代码
      • Python代码


💐The Begin💐点点关注,收藏不迷路💐

矩阵可以认为是N*M的二维数组。现在有一个巨大但稀疏的矩阵。

N,M范围是:1≤ N,M ≤100000,有K个位置有数据,K的范围是,1≤K100000。
矩阵输入的方式是从上到下(第1行到第N行)、从左到右(从第1列到第M列)扫描,记录有数据的坐标位置(x,y)和值(v)。这是按照行优先的方式保存数据的。现在要求按照列优先的方式输出数据,即从左到右、从上到下扫描,输出有数据的坐标和数值。

输入

第1行,3个整数N,M,K,其中1≤N,M,K ≤100000;下面有K行,每行3个整数:a,b,c,表示第a行第b列有数据c。数据在int范围内,保证是行优先的次序。

输出

1行,K个整数,是按照列优先次序输出的数。

样例输入

4 5 9
1 2 12
1 4 23
2 2 56
2 5 78
3 2 100
3 4 56
4 1 73
4 3 34
4 5 55

样例输出

73 12 56 100 34 23 56 78 55

提示
样例解释:

在这里插入图片描述

C语言代码

#include <stdio.h>
#include <stdlib.h>#define N 100010int main() {int n, m, k;  // n表示矩阵行数,m表示矩阵列数,k表示有数据的元素个数scanf("%d %d %d", &n, &m, &k);  // 输入矩阵的行数、列数和有数据的元素个数int x[N], y[N], d[N];  // x数组存储有数据元素的行坐标,y数组存储列坐标,d数组存储对应的值int count[m + 1];  // 用于记录每列有数据的元素个数,索引对应列数,范围是1到m,所以大小为m + 1for (int i = 0; i < m + 1; i++) {count[i] = 0;}for (int i = 1; i <= k; i++) {scanf("%d %d %d", &x[i], &y[i], &d[i]);  // 按行优先顺序输入有数据元素的行、列坐标和值count[y[i]]++;  // 对应列的数据个数加1}int* a[m + 1];  // 二维指针数组,用于存储每列的数据,a[i]指向第i列的数据数组for (int i = 1; i <= m; i++) {a[i] = (int*)malloc(count[i] * sizeof(int));  // 为每列分配对应个数的内存空间}int index[m + 1];  // 记录每列当前已存储数据的位置索引,初始化为0for (int i = 0; i < m + 1; i++) {index[i] = 0;}for (int i = 1; i <= k; i++) {a[y[i]][index[y[i]]] = d[i];  // 将数据存入对应列的数组中合适位置index[y[i]]++;  // 对应列存储位置索引后移一位}for (int i = 1; i <= m; i++) {for (int j = 0; j < count[i]; j++) {printf("%d ", a[i][j]);  // 按列优先顺序输出每列存储的数据}}printf("\n");for (int i = 1; i <= m; i++) {free(a[i]);  // 释放每列数据数组占用的内存空间}return 0;
}

C++ 代码

#include <iostream>
#include <vector>
using namespace std;const int N = 100010;int main() {int n, m, k;  // n表示矩阵行数,m表示矩阵列数,k表示有数据的元素个数cin >> n >> m >> k;  // 输入矩阵的行数、列数和有数据的元素个数vector<int> x(N), y(N), d(N);  // 分别存储有数据元素的行坐标、列坐标、对应的值vector<int> count(m + 1, 0);  // 记录每列有数据的元素个数,初始化为0,索引对应列数for (int i = 1; i <= k; i++) {cin >> x[i] >> y[i] >> d[i];  // 按行优先顺序输入有数据元素的行、列坐标和值count[y[i]]++;  // 对应列的数据个数加1}vector<vector<int>> a(m + 1);  // 二维向量,用于存储每列的数据,a[i]存储第i列的数据向量for (int i = 1; i <= m; i++) {a[i].resize(count[i]);  // 为每列的数据向量调整大小为对应个数}vector<int> index(m + 1, 0);  // 记录每列当前已存储数据的位置索引,初始化为0for (int i = 1; i <= k; i++) {a[y[i]][index[y[i]]] = d[i];  // 将数据存入对应列的数据向量中合适位置index[y[i]]++;  // 对应列存储位置索引后移一位}for (int i = 1; i <= m; i++) {for (int j = 0; j < count[i]; j++) {cout << a[i][j] << " ";  // 按列优先顺序输出每列存储的数据}}cout << endl;return 0;
}

Java代码

import java.util.ArrayList;
import java.util.Scanner;public class Main {public static final int N = 100010;public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int m = scanner.nextInt();int k = scanner.nextInt();  // 输入矩阵的行数、列数和有数据的元素个数int[] x = new int[N];int[] y = new int[N];int[] d = new int[N];  // 分别存储有数据元素的行坐标、列坐标、对应的值int[] count = new int[m + 1];  // 记录每列有数据的元素个数,索引对应列数for (int i = 1; i <= k; i++) {x[i] = scanner.nextInt();y[i] = scanner.nextInt();d[i] = scanner.nextInt();  // 按行优先顺序输入有数据元素的行、列坐标和值count[y[i]]++;  // 对应列的数据个数加1}ArrayList<ArrayList<Integer>> a = new ArrayList<>();  // 二维列表,用于存储每列的数据for (int i = 0; i <= m; i++) {a.add(new ArrayList<>());  // 初始化每列对应的列表}for (int i = 1; i <= k; i++) {a.get(y[i]).add(d[i]);  // 将数据存入对应列的列表中}for (int i = 1; i <= m; i++) {for (int j = 0; j < count[i]; j++) {System.out.print(a.get(i).get(j) + " ");  // 按列优先顺序输出每列存储的数据}}System.out.println();}
}

Python代码

n, m, k = map(int, input().split())  # 输入矩阵的行数、列数和有数据的元素个数
x, y, d = [0] * (k + 1), [0] * (k + 1), [0] * (k + 1)  # 初始化列表,用于存储行坐标、列坐标、值
count = [0] * (m + 1)  # 记录每列有数据的元素个数,索引对应列数for i in range(1, k + 1):x[i], y[i], d[i] = map(int, input().split())  # 按行优先顺序输入有数据元素的行、列坐标和值count[y[i]] += 1  # 对应列的数据个数加1a = [[] for _ in range(m + 1)]  # 二维列表,用于存储每列的数据for i in range(1, k + 1):a[y[i]].append(d[i])  # 将数据存入对应列的列表中for i in range(1, m + 1):for element in a[i]:print(element, end=" ")  # 按列优先顺序输出每列存储的数据
print()

在这里插入图片描述


💐The End💐点点关注,收藏不迷路💐

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com