लैटिन वर्ग एक मैट्रिक्स है जिसमें एक विशेष पैटर्न होता है। आइए पैटर्न की जांच के लिए विभिन्न उदाहरण देखते हैं।
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