多维数组中洛谷p1319压缩技术

b004f827cfe14d2fa65937e976d7de8f.png

 9e962ff95a6c4b7b84c7540a14d25898.png

 这样一道入门题目,本来可以用for循环直接操作,但作者异想天开(xian de dan teng)地把所有数据登记在一个数组里面,然后再统一按格式输出。也就是定义一个数组Map,大小为n成n,然后按照输入数据,把Map中每一个点改为0或者是1,然后根据题目要求的格式输出。比较简单,就直接贴代码了。

#include<stdio.h>
// 引入标准输入输出头文件

int main()
{
    int n, a, b, i, arr[50000], k = 0, j = 0;
    // 定义多个整型变量,n 可能代表某个规模,a 和 b 用于接收输入,i 用于循环控制,arr 是一个数组,k 和 j 也用于循环控制

    scanf("%d", &n);
    // 从用户输入读取一个整数存入 n

    while (k<n*n)
    // 外层循环,循环条件是 k 小于 n*n,可能是为了处理 n*n 个元素
    {
        scanf("%d%d", &a, &b);
        // 接收两个整数 a 和 b

        for (j = 0; j < a; j++)
        // 内层第一个循环,根据输入的 a 值,将数组的一部分元素赋值为 0
        {
            arr[k] = 0;
            k++;
            // 给数组元素赋值并更新 k 的值
        }

        for (j = 0; j < b; j++)
        // 内层第二个循环,根据输入的 b 值,将数组的另一部分元素赋值为 1
        {
            arr[k] = 1;
            k++;
            // 给数组元素赋值并更新 k 的值
        }
    }

    i = 0;
    while (i<n*n)
    // 另一个循环,用于输出处理后的数组
    {
        printf("%d", arr[i]);
        // 输出数组中的元素

        if ((i + 1) % n == 0)
            printf("\n");
        // 如果当前元素的下标加 1 是 n 的倍数,说明一行输出完毕,换行

        i++;
        // 更新 i 的值
    }
    return 0;
}
😊😊😊这道题的思路如下:
 
1. 首先从用户输入获取一个整数 n ,这个 n 可能代表着某种规模或维度。
2. 接着进入一个循环,循环条件是变量 k 小于 n*n 。这个循环的目的是处理一定数量的数据,这里的数量是 n*n ,可能代表一个二维结构的元素总数。
3. 在这个循环中,每次从用户输入读取两个整数 a 和 b 。
- 第一个内层循环根据 a 的值,向数组 arr 中连续存入 a 个 0 ,同时更新变量 k 以指向下一个要存入数据的位置。
- 第二个内层循环根据 b 的值,向数组 arr 中连续存入 b 个 1 ,同样更新变量 k 。
4. 当上述循环结束后,数组 arr 中已经按照输入的 a 和 b 的值填充了相应数量的 0 和 1 。
5. 最后一个循环用于输出数组 arr 的内容。循环条件是变量 i 小于 n*n 。每次输出一个数组元素,如果当前元素的下标加 1 是 n 的倍数,说明一行输出完毕,进行换行操作。
 
总体来说,这段代码的作用是根据用户输入的一系列 a 和 b 的值,将 0 和 1 填充到数组中,然后以特定的格式输出这个数组。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值