ท้าทาย
Origami (กระดาษพับ) เป็นรูปแบบศิลปะที่สร้างสรรค์ เท่าที่ฉันรู้ต้นแบบของ Origami ชอบกระดาษสี่เหลี่ยม มาเริ่มกันตั้งแต่ต้น - แปลงกระดาษสี่เหลี่ยมเป็นสี่เหลี่ยมจัตุรัส
ดังนั้นกระดาษถูกแบ่งออกเป็นสี่เหลี่ยม เราลบสี่เหลี่ยมที่ใหญ่ที่สุดซึ่งแบ่งขอบที่สั้นกว่าหนึ่งอันด้วยรูปร่างปัจจุบันทีละขั้นตอน (ดูภาพด้านล่าง) และถ้าส่วนที่เหลือหลังจากขั้นตอนเดียวน้อยกว่าหรือเท่ากับ0.001 * (area of the original paper)
กระดาษจะไม่สามารถแบ่งออกได้อีก เป็นไปได้ว่าไม่มีอะไรเหลืออยู่ในที่สุด
งานของคุณคือการคำนวณจำนวนสี่เหลี่ยมที่ทำระหว่างกระบวนการ สี่เหลี่ยมในขั้นตอนสุดท้ายที่ทำให้กระดาษที่ไม่สามารถแบ่งออกได้จะถูกนับเป็นเอาท์พุท
ตัวอย่าง (กระดาษที่มี1.350
ความกว้าง / สูง) เอาต์พุตคือ 10:
อินพุตและเอาต์พุต
การป้อนข้อมูล: ความกว้าง / ความสูงอัตราส่วนสำหรับกระดาษสี่เหลี่ยมทศนิยมหนึ่ง (หรือจำนวนเต็มโดยไม่ต้องจุด) จาก1.002
การมีขั้นตอนน้อยที่สุด1.999
0.001
นอกจากนี้คุณยังสามารถใช้รูปแบบที่เหมาะสมอื่น ๆ ที่อธิบายอัตราส่วน เพียงแค่พูดถึงมันในคำตอบของคุณ
เอาต์พุต: การนับสแควร์, หนึ่งจำนวนเต็ม
ตัวอย่าง I / O
รูปแบบการจับคู่ใช้เพื่อรักษาความเป็นระเบียบเรียบร้อยของหน้าเว็บในขณะที่รหัสของคุณไม่จำเป็นต้องรองรับการป้อนข้อมูลรายการหรือฟังก์ชั่นการทำแผนที่
1.002 => 251
1.003 => 223
1.004 => 189
1.005 => 161
1.006 => 140
1.007 => 124
1.008 => 111
1.009 => 100
ขอบคุณ @LuisMendo นี่คือกราฟคำตอบ
หมายเหตุ
- นี่คือรหัสกอล์ฟที่สั้นที่สุดที่จะชนะ
- เอาใจใส่กับช่องโหว่มาตรฐาน
- เป็นอิสระในการตัดสินใจว่าจะจัดการกับอินพุทและเอาท์พุท แต่ควรปฏิบัติตามข้อ จำกัด มาตรฐาน
ยังไงซะ...
- แสดงความคิดเห็นหากคุณมีอะไรที่ไม่ชัดเจนเกี่ยวกับความท้าทาย
- ส่วนตัวผมขอแนะนำคำตอบของคุณมีคำอธิบายหากคุณใช้ภาษากอล์ฟ
- ขอบคุณ @GregMartin อ่านคำตอบของเขาสำหรับคำอธิบายทางคณิตศาสตร์ที่ดีสำหรับความท้าทาย
รหัสตัวอย่าง
นี่คือรหัส C ++ ที่ไม่ได้บรรจุ:
#include <iostream>
#include <utility>
int f (double m)
{
double n = 1, k = 0.001;
int cnt = 0;
k *= m; // the target minimum size
while(m*n >= k)
{
m -= n; // extract a square
if(n > m)
std::swap(n, m); // keep m > n
++ cnt;
}
return cnt;
}
int main()
{
double p;
std::cin >> p;
std::cout << f(p);
return 0;
}
การคำนวณทั้งหมดที่เกี่ยวข้องในรหัสตัวอย่างต้องการความถูกต้องของ 6 float
หลักทศนิยมซึ่งจะครอบคลุมใน