新手程序员在这里试图得到更好的c,所以我开始做代码的问题,在一个网站称为codeforce。然而,我似乎卡住了,我写的代码,似乎在实践中工作,但网站不接受它的权利。
问题是:
柏林首都的剧院广场是一个长方形的广场,大小为n × m米。在城市的周年纪念之际,决定用方形花岗岩石板铺广场。每块石板的大小为a × a。铺广场所需的石板的最少数量是多少?允许覆盖比剧院广场大的表面。但广场必须有遮盖物,不允许打碎石板,石板的侧面应与广场的侧面平行。1
资料来源:
https://codeforces.com/problemset/problem/1/A
我确实很难完全理解这个问题背后的数学原理,所以我使用了一个名为"Joshua Pan"的用户提供的答案来更好地理解这个问题
资料来源:
https://www.quora.com/How-do-I-solve-the-problem-Theatre-Square-on-Codeforces
这是我的代码:
#include<stdio.h>
#include<math.h>
int main(void)
{
double n,m,a;
scanf("%lf %lf %lf", &n,&m,&a);
printf("%1.lf\n", ceil(n/a)*ceil(m/a));
return 0;
}
我用"gcc TheatreSquare.c-lm"编译的
当给定示例输入6,6,4时,我的代码生成正确的输出4,但是网站不接受此代码为正确的,我可能是错误的,但也许我使用的格式说明符不正确?
先谢了。
6条答案
按热度按时间92dk7w1h1#
典型的
double
(IEEE754 64位浮点)没有足够的精度来解决这个问题。例如,对于输入
您的程序可能会给予输出
实际上答案是
为了避免这种情况,您不应该使用浮点数据类型。
您可以添加
#include <inttypes.h>
并使用64位整数类型int64_t
进行此计算。"%" SCNd64
用于阅读,而"%" PRId64
用于写入。整数上的
cell(n/a)
可以通过(n + a - 1) / a
来完成。kg7wmglp2#
你可以用整数来解决这个问题。
这段代码在Codeforce平台的测试9中会失败(见下文),但是如果您编译它并使用相同的输入在本地运行它,结果是正确的。
编辑:
上面描述的问题是由于我运行的是64位机器,而在线编译器可能使用的是32位,
unsigned long
变量溢出。以下代码将通过所有测试。
wooyq4lh3#
使用下面的代码,它将通过所有的测试用例,我们需要使用long long声明所有变量以获得输出。
dgtucam14#
柏林首都的剧院广场是一个长方形,大小为n × m米。在城市的周年纪念日之际,决定在广场上铺上正方形的花岗岩石板,每块石板的大小为a × a。
uoifb46i5#
您可以尝试以下操作:
bcs8qyzn6#
下面是CPP中解决上述问题的代码。我们需要一个long long变量来存储值,因为我们可能有一个非常大的值。
问题指南:
当我们得到边的提示时,我们必须很好地覆盖它们。对于一个矩形,我们知道我们有一个长度和高度,表示为n * m,而正方形是a*a,所以我们将尝试首先覆盖长度,并首先确定它的正方形,我们将它除以k,然后如果存在任何余数,我们将再加一,高度也是如此。
"我希望它能帮到你"
这就是密码
}