Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Перевод с Си на Java (http://www.tehnari.ru/f41/t105992/)

blazelott 23.12.2015 18:23

Перевод с Си на Java
 
Есть задача.
Олимпиадная задача
Квадрат разбит на 4k одинаковых квадратных клеток.
Квадрат перегибается поочередно относительно вертикальной (правая половина накладывается на левую)
и горизонтальной (нижняя половина подкладывается под верхнюю) оси симметрии до тех пор,
пока все клетки не будут расположены одна под другой.
Занумеровать клетки исходного квадрата таким образом,
чтобы после выполнения перегибов номера клеток в полученном столбике
шли по возрастанию сверху вниз от 1 до 4k . Нумерация вручную не пройдет!

Интерфейс программы:
входные данные:
k – показатель степени (от единицы до десяти),
выходные данные:
вид квадрата с номерами клеток.
Пример
Вход
k=1
Выход – квадрат с четырьмя клетками:
4 3
1 2

Есть её код на Си, прошу перевести его на java. Я на Си никогда не прогал, треть кода не понимаю.
Код:

#include <stdio.h> #include <math.h>  int last[1024][1024];  bend (int size) {  int i, j;  int width= last[0][0] / (size*size*4);  for (i= 0; i < size; i++) for (j= 0; j < size; j++) {    int fl= (i+j) % 2 * 2 - 1; // 1 or -1    last[2*size-i-1][j]= last[i][j] + fl*(width * 4 - 1);    last[i][2*size-j-1]= last[i][j] + fl*(width * 2 -1);    last[2*size-i-1][2*size-j-1]= last[i][j] + fl*(width * 2 );  } }  main() {  int k, i, j, size;  scanf ("%d", &k);  last[0][0]= powl (4, k);  for (size= 1; size < powl (2,k); size*= 2) bend (size);  for (i=0; i < size; i++) {    for (j= 0; j < size; j++) printf ("%d\t", last[i][j]);    printf ("\n");  }  }

blazelott 23.12.2015 18:26

Извиняюсь, криво вставил.
Код:

#include <stdio.h> #include <math.h>  int last[1024][1024];  bend (int size) {  int i, j;  int width= last[0][0] / (size*size*4);  for (i= 0; i < size; i++) for (j= 0; j < size; j++) {    int fl= (i+j) % 2 * 2 - 1; // 1 or -1    last[2*size-i-1][j]= last[i][j] + fl*(width * 4 - 1);    last[i][2*size-j-1]= last[i][j] + fl*(width * 2 -1);    last[2*size-i-1][2*size-j-1]= last[i][j] + fl*(width * 2 );  } }  main() {  int k, i, j, size;  scanf ("%d", &k);  last[0][0]= powl (4, k);  for (size= 1; size < powl (2,k); size*= 2) bend (size);  for (i=0; i < size; i++) {    for (j= 0; j < size; j++) printf ("%d\t", last[i][j]);    printf ("\n");  } }
P.S. А кнопки правки нету?

blazelott 23.12.2015 18:33

Еще раз извините, но код почему то портиться. Пришлост в ручную.
Код:

#include <stdio.h> #include <math.h> 
int last[1024][1024]; 
bend (int size) { 
 int i, j;  int width= last[0][0] / (size*size*4); 
  for (i= 0; i < size; i++) for (j= 0; j < size; j++) {   
  int fl= (i+j) % 2 * 2 - 1; // 1 or -1   
  last[2*size-i-1][j]= last[i][j] + fl*(width * 4 - 1);   
  last[i][2*size-j-1]= last[i][j] + fl*(width * 2 -1);   
  last[2*size-i-1][2*size-j-1]= last[i][j] + fl*(width * 2 ); 
  }

main() { 
int k, i, j, size; 
scanf ("%d", &k); 
last[0][0]= powl (4, k); 
  for (size= 1; size < powl (2,k);size*= 2) bend (size); 
  for (i=0; i < size; i++) {    for (j= 0; j < size; j++)
    printf ("%d\t", last[i][j]);   
    printf ("\n"); 
  }
}



Часовой пояс GMT +4, время: 19:56.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.