我是Javascript的新手,正在与CodeWars的这个谜题作斗争。
约翰想用壁纸装饰房间。房间有尺寸:宽(w(,高(h(,长(l(。一卷壁纸宽52厘米,长10米。他想要的墙纸比他用来盖房间的墙纸多15%。如果出现错误或误判,他想购买比他需要的长度大15%的长度。
这就是我想到的:
function wallpaper(l, w, h) {
var totalArea= ((2*(l*h))+(2*(w*h))*1.15); //wall area to be covered
var rollsNeeded= (Math.ceil(totalArea/5.2));
return rollsNeeded;
一些示例文本案例:
Test.describe("wallpaper",function() {
Test.it("Basic tests",function() {
testing(wallpaper(6.3, 4.5, 3.29), 16);
testing(wallpaper(7.8, 2.9, 3.29), 16);
testing(wallpaper(6.3, 5.8, 3.13), 17);
testing(wallpaper(6.1, 6.7, 2.81), 16);
})})enter code here
但是我的函数总是比测试用例少返回一个。所以我得到的不是16,而是15,我得到的是16。我不知道我是在数学上还是在代码上犯了错误。。。
其他注意事项:所有卷(即使宽度不完整(都是边对边放置的0<=l、 w,h(浮点数(,w x h x l可能为零整数r(卷数(将始终小于或等于20
这更像是一个数学问题,而不是一个代码问题,所以让我们先纠正数学问题:
假设它是一个立方体形状的房间,它有四堵墙,每堵墙都是一个有宽度和高度的矩形。此外,相对的墙应该完全相等。
所以,约翰想在这四面墙的整个区域贴上壁纸。这大概是一个奇怪的房间,墙上没有门窗,但什么都没有。我猜想他是从天花板或地板进出的。
房间有
-
w
的宽度 -
h
的高度 -
l
的长度
翻译为:
- 使用宽度和高度作为尺寸的两面墙,面积为
w*h
- 使用长度和高度作为尺寸的另外两个墙的面积为
l*h
这是总面积的公式:
[2*(l*h)] + [2*(w*h)]
为了得到约翰需要的额外材料,我们在总数上加15%。
{[2*(l*h)] + [2*(w*h)]} + {[2*(l*h)] + [2*(w*h)]}*0.15
或
{[2*(l*h)] + [2*(w*h)]}*1.15
您的代码执行以下计算
{[2*(l*h)] + [2*(w*h)]*1.15}
这使得仅两个壁的面积增加了15%。您希望(并且可能打算(将乘法放在外括号之外
function wallpaper(l, w, h) {
var totalArea= ((2*(l*h))+(2*(w*h)))*1.15; //corrected
var rollsNeeded= (Math.ceil(totalArea/5.2));
return rollsNeeded;
}
function testing(result, expected) {
console.log("Expected: " + expected +
"ngot: "+ result +
"nsuccess: " + (result === expected));
}
testing(wallpaper(6.3, 4.5, 3.29), 16);
testing(wallpaper(7.8, 2.9, 3.29), 16);
testing(wallpaper(6.3, 5.8, 3.13), 17);
testing(wallpaper(6.1, 6.7, 2.81), 16);
作为附录,您可以简化总面积公式
[2*(l*h)] + [2*(w*h)]
= 2*l*h + 2*w*h
= 2*h*(l + w)
这使得代码更短:
var totalArea = (2*h*(l + w))*1.15; //simplified
//or : 2*h*(l + w)*1.15
//or even : 2.3*h*(l + w)