"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;
}
}