เพื่อนของฉันและฉันกำลังทำงานในห้องแล็บในวิชาวิทยาศาสตร์คอมพิวเตอร์ AP ของเราและตัดสินใจที่จะเขียนรหัสกอล์ฟปัญหาเนื่องจากเรายังมีครึ่งชั้นเรียนฟรีหลังจากเสร็จ นี่คือคำถาม:
รับตัวเลข n, หารด้วยตัวเลขแต่ละตัวได้หรือไม่?
ตัวอย่างเช่น 128 จะผ่านการทดสอบนี้มันหารด้วย 1,2 และ 8 ตัวเลขใด ๆ ที่มีศูนย์จะตัดสิทธิ์หมายเลขนั้นโดยอัตโนมัติ ในขณะที่คุณอาจใช้ภาษาอื่นและโพสต์โซลูชันด้วยหากต้องการเรามีความสนใจมากที่สุดในการเห็นว่าผู้ใช้งานขนาดเล็กสามารถสร้างโปรแกรมใน Java ได้อย่างไรเนื่องจากเป็นภาษาที่เราใช้ในชั้นเรียน จนถึงตอนนี้เราทั้งคู่มี 51 นี่คือรหัสปัจจุบันของฉัน:
public boolean dividesSelf(int n){for(int p=n;n%10>0;)n/=p%(n%10)>0?.1:10;return n<1;}
// 51 characters
// Breakdown:
// for(int p=n; Saves one semicolon to put declaration into for loop
// n%10>0;) Basic check-for-zero
// n/= Pretty simple, discarding one number off of n at a time
// p%(n%10)>0? If p (the given value) is not divisible by n%10 (the current digit)...
// .1:10; Divide by .1 (multiply by 10) so it fails the check next iteration. If it is divisible, divide by 10 to truncate the last digit
// return n<1 If the number was fully divisible, every digit would be truncated, and n would be 0. Else, there would still be non-zero digits.
ความต้องการ
ลายเซ็นวิธีสามารถเป็นสิ่งที่คุณต้องการ เพียงแค่นับจำนวนฟังก์ชั่น ตรวจสอบให้แน่ใจได้ว่าวิธีการส่งกลับค่าบูลีนและมีเพียงผ่านไปในที่เป็นตัวเลขหนึ่งพารามิเตอร์ (ไม่ใช่สตริง)
รหัสจะต้องสามารถผ่านทุกกรณีเหล่านี้ (เพื่อให้เป็นจริงกับทิศทางของคำถามเดิมเฉพาะค่าบูลีนที่แท้จริงและเท็จนับหากภาษารองรับบูลีนหากและหากภาษาของคุณไม่มีตัวแปรบูลีนคุณ อาจแทนเท็จด้วย 0 และจริงด้วยจำนวนเต็มใด ๆ ที่ไม่ใช่ศูนย์ (เด่นกว่า 1 หรือ -1):
128 -> true
12 -> true
120 -> false
122 -> true
13 -> false
32 -> false
22 -> true
42 -> false
212 -> true
213 -> false
162 -> true
204 -> false
นอกจากนี้เราไม่ได้นับช่องว่างดังนั้นอย่าลังเลที่จะทำเช่นเดียวกันเว้นแต่ช่องว่างนั้นมีความสำคัญต่อการทำงานของโปรแกรม (ดังนั้นการขึ้นบรรทัดใหม่ใน Java จะไม่นับ แต่เว้นวรรคเดียวระหว่างint
และx=1
นับ) โชคดี !
0
ตัวเลขที่เป็นจำนวนมากของแต่ละคน) ฉันคิดว่าคำตอบส่วนใหญ่จะได้นานขึ้นในวิธีที่ไม่น่าสนใจที่จะรวมการตรวจสอบ ดังนั้นฉันจึงชอบปัญหาที่เกิดขึ้นจากชื่อเรื่องนั้นดีกว่า (หารด้วยตัวเลขแทนที่จะเป็นตัวเลขหลายหลักซึ่งไม่รวม 0)
true
และfalse
หรือเป็นจริง /ค่าเท็จตกลงเช่นกัน? 3.java
แท็กไม่ได้ใช้ที่นี่เนื่องจากความท้าทายนั้นไม่เกี่ยวข้องกับ Java