P1319 压缩技术
2026/4/29 1:25:03 网站建设 项目流程

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> int main() { // 动态读取所有压缩码数字 int* codes = NULL; int count = 0; int capacity = 10; int num; // 初始分配内存 codes = (int*)malloc(capacity * sizeof(int)); // 读取所有数字 while (scanf("%d", &num) == 1) { if (count >= capacity) { // 扩大容量 capacity *= 2; int* temp = (int*)realloc(codes, capacity * sizeof(int)); if (temp == NULL) { printf("内存分配失败\n"); free(codes); return 1; } codes = temp; } codes[count++] = num; } // 第一个数字是 N int N = codes[0]; // 创建 N×N 的矩阵为一行 int* matrix = (int*)malloc(N*N * sizeof(int)); // 填充矩阵 int current = 0; // 当前填充的数字(0 或 1) int code_index = 1; // 从第二个数字开始(第一个是N) int remaining = codes[code_index]; // 当前数字还需要填充的次数 for (int i = 0; i < N * N; i++) { if (remaining == 0) { code_index++; current = 1 - current; remaining = codes[code_index]; } matrix[i] = current; remaining--; } // 输出矩阵 for (int i = 1; i <= N * N; i++) { printf("%d", matrix[i - 1]); if (i % N == 0) { printf("\n"); } } // 释放内存 free(matrix); free(codes); return 0; }

我的思路是将需要打印的方阵看成一行,在输出时只需要判断输出的一行数字有无到达N个,再输出换行符。这样就避免了给数组赋值时考虑行号与列号的变换。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询