С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
vernon
2 / 2 / 0
Регистрация: 15.01.2014
Сообщений: 50
1

Олимпиадная задача. Занумеровать клетки исходного квадрата по правилу

25.04.2014, 16:24. Просмотров 632. Ответов 1
Метки нет (Все метки)

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

Интерфейс программы:
входные данные:
k – показатель степени (от единицы до десяти),
выходные данные:
вид квадрата с номерами клеток.
Пример
Вход
k=1
Выход – квадрат с четырьмя клетками:
4 3
1 2
1
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.04.2014, 16:24
Ответы с готовыми решениями:

Составить из исходного массива новый по правилу
Дан массив A N<=10. Нужно составить из исходного массива новый, где числа будут...

Из исходного массива сформировать новый по правилу
Из элементов массива А размерностью n>10 сформируйте массив В той же...

Олимпиадная задача по информатике 1997 год
Доброго времени суток. Попалась олимпиадная задача по информатике за 97 год. ...

Занумеровать клетки исходного квадрата следующим образом
Помогите кто сможет!! Задали реализовать задачу на с++.А с чего начать просто...

Олимпиадная задача
Вот наткнулся сегодня на такую задачу: Всем известно, что в позапрошлом веке...

1
gng
828 / 569 / 173
Регистрация: 08.09.2013
Сообщений: 1,530
26.04.2014, 07:58 2
Лучший ответ Сообщение было отмечено vernon как решение

Решение

Решение "в лоб". Подойдет, если нет ограничений на память.
Для каждой клетки постоянно хранятся нач. и кон. значения диапозона.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <stdio.h>
#include <math.h>
 
int b[1000][1000], e[1000][1000];
 
bend (size) {
  if (b[0][0] == e[0][0]) return;
 
  int i, j;
  for (i= 0; i < size; i++) for (j= 0; j < size; j++) {
    e[2*size-i-1][j]= b[i][j];
    b[2*size-i-1][j]= b[i][j] + (e[i][j] - b[i][j])/2;
    b[i][j]= e[i][j] + (b[i][j]-e[i][j])/2;
  }
  for (i= 0; i < size*2; i++) for (j= 0; j < size; j++) {
    e[i][2*size-j-1]= b[i][j];
    b[i][2*size-j-1]= b[i][j] + (e[i][j] - b[i][j])/2;
    b[i][j]= e[i][j] + (b[i][j]-e[i][j])/2;
  }
  bend (size * 2);
}
 
main() {
  int k, i, j, size= 1;
  scanf ("%d", &k);
  b[0][0]= 1;
  e[0][0]= powl (4, k);
  bend( size );
  for (i=0; i < powl (2,k); i++) {
    for (j= 0; j < powl (2,k); j++) printf ("%d\t", b[i][j]);
    printf ("\n");
  }
}
Добавлено через 8 часов 4 минуты
Немного "причесал" код
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#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");
  }
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.04.2014, 07:58

Олимпиадная задача
Обчислити суму N рядків трикутника Паскаля (1≤n≤100). Формат входных данных ...

Олимпиадная задача
Условие: http://i.imm.io/1m1cH.jpeg Примеры вывода: http://i.imm.io/1m1cL.png...

Олимпиадная задача
Маленький мальчик, плывя с родителями вверх по речке, отпустил кораблик. После...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru