Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ลาตินสแควร์ (Latin Square) ใน C++

โจทย์

ลาตินสแควร์ (Latin square) คือเมทริกซ์ที่มีรูปแบบพิเศษ มาดูตัวอย่างต่างๆ เพื่อตรวจสอบรูปแบบ

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