• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Перевод с Си на Java

blazelott

Новые
Регистрация
3 Фев 2013
Сообщения
18
Реакции
0
Баллы
0
Перевод с Си на 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");   }   }
 
Извиняюсь, криво вставил.
Код:
#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. А кнопки правки нету?
 
Еще раз извините, но код почему то портиться. Пришлост в ручную.
Код:
#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");   
  } 
}
 
Назад
Сверху