The program's description is as follows:
Create a routine that will take n integer, from 1 to n ^ 2,inclusive, and find all possible permutations where the n integers add up to n*(n*n + 1) / 2 with the qualification that none of the integers are equal to any of the other integers.
Right now I have a case by case based program for each n but I was told to make it work for all cases.
public static void createPerm3(){//works only if(n==3) for(int i = 1; i <= n * n; i++) for(int j = 1; j <= n * n; j++) if(i != j && i != mg-i-j && j != mg-i-j &&mg-i-j <= n * n && mg-i-j >0){ Integer[] temp = {i,j,mg-i-j}; perm.add(deepCopy(temp));}//deepCopy returns a manual copy of the array } public static void createPerm4(){//works only if(n==4) for(int i = 1; i <= n * n; i++) for(int j = 1; j <= n * n; j++) for(int k = 1; k <= n * n; k++) if(i != j && i !=k && i != mg-i-j-k && j != k && j != mg-i-j-k && k != mg-i-j-k && mg-i-j-k <= n * n && mg-i-j-k >0){ Integer[] temp = {i,j,k,mg-i-j-k}; perm.add(deepCopy(temp));}} public static void createPerm5(){//works only if(n==5) for(int i = 1; i <= n * n; i++) for(int j = 1; j <= n * n; j++) for(int k = 1; k <= n * n; k++) for(int l = 1; l <= n * n;l++) if(i != j && i !=k && i != l && i != mg-i-j-k-l && j != k && j != l && j != mg-i-j-k-l && k != l && k != mg-i-j-k-l && l != mg-i-j-k-l && mg-i-j-k-l <= n * n && mg-i-j-k-l >0){ Integer[] temp = {i,j,k,mg-i-j-k}; perm.add(deepCopy(temp));}} public static final int n = 3; //this is should be the only thing that changes in the program public static final int mg = n*(n*n + 1) / 2; // magic number public static ArrayList<Integer[]> perm = new ArrayList<Integer[]>();