จตุรัสละตินเป็นเมทริกซ์ที่มีรูปแบบพิเศษ มาดูตัวอย่างต่างๆ เพื่อตรวจสอบรูปแบบกัน
1 2 2 1 1 2 3 3 1 2 2 3 1 1 2 3 4 4 1 2 3 3 4 1 2 2 3 4 1
จตุรัสละตินที่คุณได้รับจะมีขนาดแตกต่างกันตามที่คุณสังเกตเห็นในตัวอย่างด้านบน แต่ถ้าคุณสังเกตรูปแบบของเมทริกซ์ข้างต้นอย่างรอบคอบ คุณจะพบว่าจำนวนสุดท้ายของแถวก่อนหน้ามาเป็นองค์ประกอบแรกของแถวถัดไป
นั่นคือรูปแบบที่ซ่อนอยู่ในจตุรัสละติน เราต้องเขียนโปรแกรมที่สร้างเมทริกซ์ข้างต้นสำหรับอินพุต n
อัลกอริทึม
- เริ่มต้น n ด้วยตัวเลขใดๆ ที่คุณต้องการ
- เริ่มต้นตัวเลขที่มีค่า n + 1 เรียกว่า first_half_end
- เขียนลูปที่วนซ้ำจาก 1 ถึง n ทั้งสองอย่างรวมกัน
- กำหนดค่า first_half_end ให้กับตัวแปรชื่อ first_half_start
- เขียนลูปจนกระทั่ง first_half_start ถึงค่า n.
- พิมพ์ตัวแปรการวนซ้ำ เช่น first_half_start
- เขียนลูปที่วนซ้ำจาก 1 ถึง first_half_end
- พิมพ์ตัวแปรการวนซ้ำ
- ลดค่าของ first_half_end ลง 1
- เลื่อนแถวถัดไป
การนำไปใช้
ต่อไปนี้เป็นการนำอัลกอริธึมข้างต้นไปใช้ใน C++
#include <bits/stdc++.h> using namespace std; void generateLatinSquare(int n) { int first_half_end = n + 1; for (int i = 1; i <= n; i++) { int first_half_start = first_half_end; while (first_half_start <= n) { cout << first_half_start << " "; first_half_start++; } for (int second_half_start = 1; second_half_start < first_half_end; second_half_start++){ cout << second_half_start << " "; } first_half_end--; cout << endl; } cout << endl; } int main(void) { generateLatinSquare(2); generateLatinSquare(3); generateLatinSquare(4); return 0; }
ผลลัพธ์
หากคุณเรียกใช้โค้ดด้านบน คุณจะได้ผลลัพธ์ดังต่อไปนี้
1 2 2 1 1 2 3 3 1 2 2 3 1 1 2 3 4 4 1 2 3 3 4 1 2 2 3 4 1