Pagini recente » Cod sursa (job #867106) | Cod sursa (job #2803783) | Cod sursa (job #1575781) | Cod sursa (job #225110) | Cod sursa (job #1491380)
import java.io.*;
class Main {
static int fractal(int debug,int k, int x, int y, int[] Cadrane) {
//find out where the coords lie
if (k == 0) return 0;
int size = ((int) Math.pow(2, k));
if (debug==1) System.out.print("\nk= " + k + " 2^k=" + size);
int xaxis = x > (size / 2) ? 2 : 1;//>0?0:1;
int yaxis = y > (size / 2) ? 2 : 1;//>0?0:1;
if (debug==1) System.out.print(" " + x + "," + y + " are in: " + xaxis + "," + yaxis);
int cadran = 0;
if (xaxis == 1) {
if (yaxis == 1) {
cadran = 0;
} else cadran = 1;
} else {
if (yaxis == 1) {
cadran = 3;
} else {
cadran = 2;
}
}
if (debug==1)System.out.print(" Cadran: " + cadran);
int sum = 0;
for (int i = 0; i < Cadrane.length; i++) {
if (debug==1) System.out.print(" Cadran curent:" + Cadrane[i]) ;
if (Cadrane[i] != cadran)
sum = sum + (int) Math.pow(2, k * 2 - 2);
else
break;
}
int[] newCadrane;
if (cadran == 0) {
newCadrane = new int[]{Cadrane[0], Cadrane[3], Cadrane[2], Cadrane[1]};
} else if (cadran == 1) {
newCadrane = new int[]{Cadrane[0], Cadrane[1], Cadrane[2], Cadrane[3]};
y = y - size / 2;
} else if (cadran == 2) {
newCadrane = new int[]{Cadrane[0], Cadrane[1], Cadrane[2], Cadrane[3]};
x = x - size / 2;
y = y - size / 2;
} else {
newCadrane = new int[]{Cadrane[2], Cadrane[1], Cadrane[0], Cadrane[3]};
x = x - size / 2;
}
if (debug==1) System.out.print(" Adding:" + sum);
return sum + fractal(debug,k - 1, x, y, newCadrane);
}
static public int main(String []args) throws IOException {
int debug=0;
BufferedReader in;
BufferedWriter out;
in = new BufferedReader(new FileReader(new File("fractal.in")));
out= new BufferedWriter(new FileWriter(new File("fractal.out")));
String kxy=in.readLine();
String[] vars=kxy.split(" ");
int k=Integer.parseInt(vars[0]);
int x=Integer.parseInt(vars[1]);
int y=Integer.parseInt(vars[2]);
in.close();
if (debug==1) System.out.println("kxy= "+ k+" "+x+" "+ y);
int[] Cadrane = {0, 1, 2, 3};
int rezultat=fractal(debug,k, x, y, Cadrane);
out.write(Integer.toString(rezultat));
out.close();
return 0;
}
}