ข้อกำหนดคำถามคือ:
การคาดเดา Callatz:
สำหรับหมายเลขธรรมชาติใด ๆ n ถ้าเป็นตัวเลขที่สม่ำเสมอให้ตัดครึ่ง; หากเป็นเลขคี่ตัด (3n+1) ปิดครึ่ง หากคุณตัดสิ่งนี้ซ้ำ ๆ คุณจะได้รับ n = 1 ในขั้นตอนที่แน่นอน เมื่อเราตรวจสอบการคาดเดาของ Karaz เพื่อหลีกเลี่ยงการคำนวณซ้ำ ๆ เราสามารถบันทึกทุกหมายเลขที่พบในระหว่างกระบวนการเรียกซ้ำ ตัวอย่างเช่นเมื่อตรวจสอบ n = 3 เราจำเป็นต้องคำนวณ 3, 5, 8, 4, 2 และ 1 เมื่อเราตรวจสอบ n = 5, 8, 4 และ 2 เราสามารถกำหนดความถูกต้องของการคาดเดา Karaz ได้โดยตรง เขียนทับโดยตัวเลขอื่น ๆ ในลำดับ
ตอนนี้ได้รับชุดตัวเลขที่จะตรวจสอบแล้วเราจำเป็นต้องตรวจสอบหมายเลขคีย์สองสามตัวเท่านั้นดังนั้นเราจึงไม่ต้องตรวจสอบตัวเลขที่เหลือซ้ำ ๆ ซ้ำ ๆ งานของคุณคือการค้นหาหมายเลขคีย์เหล่านี้และส่งออกตามลำดับจากขนาดใหญ่ถึงขนาดเล็ก
รูปแบบอินพุต: อินพุตทดสอบแต่ละครั้งมี 1 กรณีทดสอบ บรรทัดที่ 1 ให้จำนวนเต็มบวก k (<100), บรรทัดที่ 2 ให้ค่า k ของ k ที่แตกต่างกันเป็นจำนวนเต็มบวก n (1 <n <= 100) ที่จะตรวจสอบโดยคั่นด้วยช่องว่าง
รูปแบบเอาท์พุท: เอาต์พุตของแต่ละกรณีทดสอบใช้เวลาหนึ่งแถวและหมายเลขคีย์จะถูกส่งออกตามลำดับจากขนาดใหญ่ถึงขนาดเล็ก ตัวเลขจะถูกคั่นด้วย 1 ช่องว่าง แต่ไม่มีช่องว่างหลังจากหมายเลขสุดท้ายในบรรทัด
ป้อนตัวอย่าง:
6
3 5 6 7 8 11
ตัวอย่างเอาท์พุท:
7 6
รหัสมีดังนี้:
<span style = "ตัวอักษรขนาด: 14px;"> นำเข้า java.util.arraydequ; นำเข้า java.util.arraylist; นำเข้า java.util.dequ; นำเข้า java.util.list; นำเข้า java.util.queue; นำเข้า java.util.scanner; นำเข้า java.util.sortset; นำเข้า Java.util.Treeset; ระดับสาธารณะ PAT1005 {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {// todo วิธีการที่สร้างอัตโนมัติสแกนเนอร์สแกนเนอร์สแกนเนอร์ = สแกนเนอร์ใหม่ (System.in); int numsize = scanner.nextint (); ArrayDeque <Integer> newArrayDeque = new ArrayDeque <Integer> (); ArrayDeque <จำนวนเต็ม> CloseArrayDeque = new ArrayDeque <Integer> (); int i; ในขณะที่ (scanner.hasnext ()) {// อ่านค่าอินพุตแป้นพิมพ์สำหรับ (i = 0; i <numsize; i ++) {newarraydequ.add (scanner.nextint ()); } if (i> = numsize) {break; }} int temp; สำหรับ (จำนวนเต็มจำนวนเต็ม: NewarrayDequ) {// บันทึกตัวเลขที่ไม่สำคัญลงใน closearraydequate temp = จำนวนเต็ม; ในขณะที่ (temp! = 1) {ถ้า (temp%2 == 0) {temp = temp/2; if (newarraydequ.contains (temp))) {closearraydequ.add (temp); }} else {temp = (temp*3+1)/2; if (newarraydequ.contains (temp))) {closearraydequ.add (temp); }}}} sortedSet <integer> sortedSet = new Treeset <Integer> (); // sortedset ใช้เพื่อจัดเก็บหมายเลขคีย์สำหรับ (จำนวนเต็มจำนวนเต็ม: newarraydeque) {ถ้า (! closearraydeque.contains (จำนวนเต็ม)) {sortedset.add (จำนวนเต็ม); }} int [] leftint = new int [sortedSet.Size ()]; int j = sortedset.size ()-1; สำหรับ (จำนวนเต็มจำนวนเต็ม: sortedset) {leftint [j] = จำนวนเต็ม; J--; } สำหรับ (int j2 = 0; j2 <leftint.length; j2 ++) {// เอาต์พุตหมายเลขคีย์ตามลำดับจากขนาดใหญ่ถึงขนาดเล็กถ้า (j2 == leftint.length-1) {system.out.println (leftint [j2]); } else {system.out.print (leftint [j2]+""); }}}}} </span>ข้างต้นเป็นเรื่องเกี่ยวกับบทความนี้ฉันหวังว่ามันจะเป็นประโยชน์กับการเรียนรู้ของทุกคน