"a 64 in the (256,0) cell" It should set it to 4 because of 256/64=4
actually I don't get it...
Ohh I got it now, I made a mistake, I correct it and answer later
Every[k][0]= (k%256)/64; Every[k][1]= (k%64)/16; Every[k][2]= (k%16)/4; Every[k][3]= k%4; Every[k][4]= Value[0][(k%256)/64]+Value[1][(k%64)/16]+Value[2][(k%16)/4]+Value[3][k%4];
Every[k][0]= (k%256)/64;
System.out.println("k="+k+", size="+Every.length+", (k%256)/64="+((k%256)/64)));
for (int k=0; k<Every.length; k++)
Task[o]=Solution[o];
import greenfoot.*; import java.awt.Color; public class AnzeigePersonen extends Actor { public static int Number=7; public static int[] Task; public static int[][] Every; public static int[][] Value = { {6,6,1,1,2,4,8}, {1,9,7,5,9,8,8}, {2,10,1,1,7,5,10}, {4,3,3,6,9,4,3}, {2,8,10,1,8,2,3}, {4,1,2,2,3,8,3}, {1,5,4,7,9,9,9} }; /* { {6,6,1,1,2,4,8,9,10}, {1,9,7,5,9,8,8,7,1}, {2,10,1,1,7,5,10,2,5}, {4,3,3,6,9,4,3,7,4}, {2,8,10,1,8,2,3,9,8}, {4,1,2,2,3,8,3,5,9}, {1,5,4,7,9,9,9,8,2}, {7,1,6,5,9,9,2,2,10}, {9,7,9,8,7,10,4,2,7} }; */ private int Pow(int a, int b) { int result=1; for (int z=1; z<=b; z++) {result=result*a;} return result; } private int Fak(int a) { int result = 1; for (int i = 1; i <= a; i++) { result *= i; } return result; } private void Every() { for (int k=0; k<Every .length; k++) { for (int b=0; b<Number;b++) { if (b!=Number-1) {Every[k][b]= (k%Pow(Number,Number-b))/Pow(Number,Number-1-b);} else {Every[k][b]= k%Number;} } for (int c=0; c<Number;c++) { Every[k][Number]+=Value[c][Every[k][c]]; } } } private void Solution() { int[] Solution=new int[Number]; int SolutionValue=0; for (int m=0; m<=Every .length-1; m++) { int counts=1; int Zahl=Every[m][Number]; for (int r=0; r<Number; r++) { for (int s=0; s<Number; s++) { if (r!=s) { if (Every[m][r]==Every[m][s]) {counts=0;} } } } if (Zahl>SolutionValue&&counts==1) { for (int w=0; w<Number; w++) { Solution[w]=Every[m][w]; SolutionValue=Every[m][w+1]; } } } Task = Solution; } public void act() { String persons = "Persons"; for (int i=1; i<=Number; i++) { persons = persons+System.getProperty("line.separator")+i; } if ( Every == null) { Every = new int[Pow(Number, Number)][Number+1]; Every(); Solution(); } setImage(new GreenfootImage( persons , 36, Color.BLACK, new Color(0, 0, 0, 0))); } }
return result;
Every[k][b]= (k%Pow(Number,Number-b))/Pow(Number,Number-1-b);}
{6,6,1,1,2,4,8}, {1,9,7,5,9,8,8}, {2,10,1,1,7,5,10}, {4,3,3,6,9,4,3}, {2,8,10,1,8,2,3}, {4,1,2,2,3,8,3}, {1,5,4,7,9,9,9}
for (int k=0; k<=Pow(Number, Number); k++) { Every[k][0]= k/64; Every[k][1]= k/16; Every[k][2]= k/4; Every[k][3]= k%4; Every[k][4]= Value[0][k/64]+Value[1][k/16]+Value[2][k/4]+Value[3][k%4]; }
for (int k=0; k<Every .length; k++) { for (int b=0; b<Number;b++) { if (b!=Number-1) {Every[k][b]= (k%Pow(Number,Number-b))/Pow(Number,Number-1-b);} else {Every[k][b]= k%Number;} } for (int c=0; c<Number;c++) { Every[k][Number]+=Value[c][Every[k][c]]; } }
/** fields */ int[][] combos; // your 'Every' int n = 4; // your 'Number' /** main code */ int[] vals = new int[n]; // create an array for the values for (int i=0; i<n; i++) vals[i] = i; // load 'vals' array combos = getCombos(vals); // compute combinations /** method to compute factorials */ private int fac(int num) { int m = 1; for (int i=0; i<num; i++) m *= (i+1); return m; } /** method to compute combinations */ private int[][] getCombos(int[] set) { if (set.length == 1) return new int[][] { set }; // a single value has only one combination int[][] arr = new int[fac(set.length)][set.length]; // for combinations int num = 0; for (int i=0; i<set.length; i++) // for each number in set { int[] set2 = new int[set.length-1]; // creates an array for a set without the current number for (int j=0; j<set.length; j++) // loads set2 { if (j == i) continue; // to not include current number set2[j-(j>i ? 1 : 0)] = set[j]; } for (int[] parts : getCombos(set2)) // for each combination in smaller set { arr[num][0] = set[i]; // begin with current number for (int k=0; k<parts.length; k++) arr[num][k+1] = parts[k]; // add one of the smaller combinations num++; // ready for next combination } } return arr; // return the computed combinations }
int hi = 0; int cbo = 0; for (int i=0; i<combos.length; i++) { int sum = 0; for (int j=0; j<combos[i].length; j++) sum += Value[combos[i][j]][j]; if (sum > hi) { hi = sum; cbo = i; } }