แรงบันดาลใจจากคำถามที่กองมากเกิน
กำหนดอาร์เรย์ที่ไม่ว่างเปล่าของจำนวนเต็มxและเป็นจำนวนเต็มบวกn, คำนวณผลรวมของแต่ละบล็อกเลื่อนความยาวnพร้อมอาร์เรย์x, circularlyกรอกค่าที่ขาดหายไปทางด้านซ้ายที่มีค่าจากขวาดังนี้
- บล็อกแรกมีรายการแรกของ
xนำหน้าด้วยn-1รายการที่เปลี่ยนเป็นวงกลม - บล็อกที่สองมีรายการแรกและรายการที่สองของ
xนำหน้าด้วยn-2รายการที่เปลี่ยนเป็นวงกลม และอื่น ๆ
อาร์เรย์เอาต์พุตyมีขนาดเท่าxกันกับ มันเป็นไปได้สำหรับnที่จะเกินความยาวของxแล้วค่าของxกำลัง circularly นำกลับมาใช้หลายครั้ง
ตัวอย่าง
ตัวอย่างที่ 1 (ค่าจะถูกนำมาใช้ซ้ำเพียงครั้งเดียว)
x = [2, 4, -3, 0, -4]
n = 3
ให้เป็นเอาท์พุท
y = [-2, 2, 3, 1, -7]
ที่ไหน
-2คือผลรวมของบล็อก[0, -4, 2](สองค่าแรกมาจากการเลื่อนแบบวงกลม)2คือผลรวมของ[-4, 2, 4](ค่าแรกมาจากการเลื่อนแบบวงกลม)3คือผลรวมของ[2, 4, -3](ไม่จำเป็นต้องเปลี่ยนแบบวงกลมอีกต่อไป)1คือผลรวมของ[4, -3, 0]-7[-3, 0, -4]คือผลรวมของ
ตัวอย่างที่ 2 (ค่าจะถูกนำมาใช้ซ้ำหลายครั้ง)
x = [1, 2]
n = 5
ให้
y = [7, 8]
ที่ไหน
7คือผลรวมของบล็อก[1, 2, 1, 2, 1](ค่าสี่ค่าแรกถูกนำกลับมาใช้แบบวนรอบ)8คือผลรวมของบล็อก[2, 1, 2, 1, 2](ค่าสามค่าแรกถูกนำกลับมาใช้แบบวนรอบ)
กฎเพิ่มเติม
- อัลกอริทึมควรทำงานสำหรับอาร์เรย์ที่มีขนาดตามอำเภอใจและสำหรับค่าจำนวนเต็มโดยพลการ เป็นที่ยอมรับได้หากโปรแกรมนั้นถูก จำกัด โดยชนิดข้อมูลหรือข้อ จำกัด หน่วยความจำ แต่ต้องจัดการค่าบวกจำนวนเต็มลบ
- อินพุต / เอาต์พุตสามารถนำ / ผลิตโดยใด ๆวิธีการที่เหมาะสม
- โปรแกรมหรือฟังก์ชั่นที่ได้รับอนุญาตในการเขียนโปรแกรมภาษา ช่องโหว่มาตรฐานเป็นสิ่งต้องห้าม
- รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ
กรณีทดสอบ
x, n, -> y
[2, 4, -3, 0, -4], 3 -> [-2, 2, 3, 1, -7]
[1, 2], 5 -> [7, 8]
[2], 7 -> [14]
[-5, 4, 0, 1, 0, -10, -4], 4 -> [-19, -15, -5, 0, 5, -9, -13]
[-5, 4, 0, 1, 0, -10, -4], 1 -> [-5, 4, 0, 1, 0, -10, -4]
[-2, -1, 0, 1, 2, 3], 5 -> [4, 3, 2, 1, 0, 5]
[-10, 0, 10], 4 -> [-10, 0, 10]