Латинский квадрат. Латинским квадратом порядка n называется квадратная таблица размером n×n, каждая строка и каждый столбец которой содержит все числа от 1 до n. Для заданного n в матрице L(n;n) построить латинский квадрат порядка n.
Тесты:
Ввод | Вывод | Комментарий |
5 | 1 2 3 4 5
2 3 4 5 1 3 4 5 1 2 4 5 1 2 3 5 1 2 3 4 |
Пройден |
4 | 1 2 3 4
2 3 4 1 3 4 1 2 4 1 2 3 |
Пройден |
Код на С++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
#include <iostream> using namespace std; int main() { int n; cin>>n; int sq[n][n]; for (int i=0; i<n; i++)//заполнение массива с заданным свойством { int a=i+1; for (int j=0; j<n; j++) { sq[i][j]=a; a++; if (a>n) a=1; } } for (int i=0; i<n; i++)//вывод { for (int j=0; j<n; j++) cout<<sq[i][j]<<' '; cout<<endl; } return 0; } |
Код на Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
import java.util.*; import java.lang.*; import java.io.*; class Ideone { public static void print (int[][] a){ for (int i=0; i<a.length; i++){ for (int j=0; j<a[i].length; j++) System.out.print(a[i][j]+" "); System.out.println(); } } public static int[][] latinsq(int n){ int[][] c= new int[n][n]; for (int i=0; i<n; i++){ //заполнение массива с заданным свойством int a=i+1; for (int j=0; j<n; j++){ c[i][j]=a; a++; if (a>n) a=1; } } return c; } public static void main (String[] args) throws java.lang.Exception { Scanner in=new Scanner(System.in); int n; n=in.nextInt(); print(latinsq(n)); } } |
Решение:
В предложенном варианте заполнения первый элемент строки — это ее номер увеличенный на единицу. Последующий элемент есть увеличенный на единицу предыдущий (если он не равен n), или 1 (в противном случае).
С работой программы на С++ можно ознакомиться здесь, а на Java здесь.
Зачтено, но Вы очень усложняете. Всё гораздо проще: