NOI10004 填充矩形

本文介绍了一个简单的计算问题:如何计算给定尺寸的矩形中能够填充的最大数量的正方形。文章提供了一段C语言代码实现,该算法适用于数据范围限制在1到10^9之间的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

时间限制: 1000 ms 空间限制: 262144 KB

题目描述

已知矩形的大小为n×m,现用a×a的正方形填充该矩形。输入三个正整数n,m,a(n,m,a≤10^9),计算至多能填入多少正方形?(正方形可以正好碰到矩形边界,但不能超出矩形外)

输入

一行三个用一个空格隔开的正整数n,m,a。

输出

输出能填入正方形的数量。

样例输入

3 4 1
样例输出

12

数据范围限制

1<=n,m,a≤10^9

问题分析

这是一个简单的计算问题,也是一个整除问题。

需要根据数据范围限制,选取合适的数据类型。

程序说明
变量类型使用long。

这道题目的坑爹之处在于,不能用整个大矩形面积除以小矩形面积,而应该用大矩形的长除以小矩形的边长,舍去小数部分(小数部分表示超出边界),大矩形的宽除以小矩形的边长,舍去小数部分

#include <stdio.h>

int main(void)
{
    long n, m, a;

    scanf("%ld%ld%ld", &n, &m, &a);

    printf("%ld\n", (n / a) * (m / a));

    return 0;
}
### 关于NOI 1380 蛇形填充数组编程实现 #### 题目描述 给定一个n×m的矩阵,按照特定顺序填入自然数序列中的前n*m个数字。这个特定顺序是从左上角出发向右走直到最右边再向下转而向左直至碰到左边边界转向下方移动到底部最后向上回到起点左侧一列并重复上述过程直到整个表格被填满。 #### 解题思路分析 此问题主要考察二维数组的操作以及循环结构的应用[^1]。为了完成这一任务,可以采用模拟的方法来解决这个问题: - 初始化变量用于记录当前应该放置哪个数值。 - 使用四个方向指示器分别表示向右、下、左、上的运动状态。 - 利用两个布尔型辅助函数判断当前位置是否越界或者已经被访问过。 - 当遇到障碍(即超出界限或者是已经填写过的格子),则改变行走的方向继续前进。 - 循环执行以上操作直到所有的位置都被确赋值为止。 下面是一个具体的Python代码示例实现了该算法逻辑: ```python def fill_matrix(n, m): matrix = [[0]*m for _ in range(n)] num = 1 row, col = 0, 0 directions = [(0, 1), (1, 0), (0, -1), (-1, 0)] # 右 下 左 上 direction_index = 0 while num <= n * m: matrix[row][col] = num next_row = row + directions[direction_index][0] next_col = col + directions[direction_index][1] if not (0 <= next_row < n and 0 <= next_col < m and matrix[next_row][next_col] == 0): direction_index = (direction_index + 1) % 4 row += directions[direction_index][0] col += directions[direction_index][1] num += 1 return matrix for line in fill_matrix(4, 5): print(line) ``` 这段程序定义了一个`fill_matrix()` 函数接收参数 `n`, `m` 表示要创建的矩形大小,并返回按指定方式填充后的列表形式的结果。通过调整行列索引和方向控制变量,在遍历过程中不断更新下一个待写入的位置,从而达到预期效果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值