แรงบันดาลใจจากคำถามที่กองมากเกิน
กำหนดอาร์เรย์ที่ไม่ว่างเปล่าของจำนวนเต็ม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]