ООО «Симптотика» собирается наладить выпуск обучающих игр для детей младшего дошкольного возраста. Одной из придуманных игр был набор кубиков, из которых можно было собирать различные фигуры. Кубики упаковывались в коробку размером N * N * 1 кубиков.
Однако многочисленные маркетинговые исследования показали, что детям неинтересно просто собирать различные фигурки. Гораздо интереснее складывать некоторый набор кубиков на дно коробки в столбики, а после этого переворачивать коробку на 90 градусов по часовой стрелке и смотреть, как именно меняется их расположение. Будем для простоты считать, что коробка поворачивается мгновенно, после чего все кубики падают на дно.
Разумеется, многим детям становится интересно, как будет выглядеть расположение кубиков после K поворотов в том же направлении. Требуется написать программу, которая вычисляет итоговое положение кубиков в коробке после K поворотов. Формат входных данных
Сначала с клавиатуры вводятся целые числа N и K через пробел (1<N<10, 0<K<10). После этого во второй строке вводятся N неотрицательных чисел, не превышающих N. i-ое число обозначает количество кубиков в столбце под номером i. Формат выходных данных
На экран необходимо вывести N чисел через пробел, каждое из которых обозначает количество кубиков в соответствующем столбце в полученном после K поворотов расположении кубиков.
Пока вот что получается.
Хочу сделать через массивы
Но там можно сделать вроде по другому
Через какое то число поворотов расположение кубиков такое же все время получается.
Код:
program kubiki;
uses crt;
var p,v,t,c,pia,hes,i,n,k,s:integer;
m1:array[1..5] of integer;
m2:array[1..5] of integer;
m3:array[1..5] of integer;
m4:array[1..5] of integer;
m5:array[1..5] of integer;
g1:array[1..5] of integer;
g2:array[1..5] of integer;
g3:array[1..5] of integer;
g4:array[1..5] of integer;
g5:array[1..5] of integer;
Begin
clrscr;
writeln('VVEDITE KOL-VO KUBIKOV');
readln(n);
writeln('VVEDITE CHISLO POVOROTOV');
readln(k);
writeln('Skoko v 1-om');
readln(p);
writeln('Skoko vo 2-om:');
readln(v);
writeln('Skoko v 3-em:');
readln(t);
writeln('Skoko v 4-em:');
readln(c);
writeln('Skoko v 5-em:');
readln(pia);
s:=p+v+t+c+pia+hes;
if s<>n then
writeln('Vi vveli nevernoe kol-vo kubikov') else
for i:=1 to p do
begin
m1[i]:=1;
end;
for i:=1 to v do
begin
m2[i]:=1;
end;
for i:=1 to t do
begin
m3[i]:=1;
end;
for i:=1 to c do
begin
m4[i]:=1;
end;
for i:=1 to pia do
begin
m5[i]:=1;
end;
for i:=1 to n do
if m1[i]=1 then
g1[i]:=1 else g1[i]:=0;
if m2[i]=1 then
g1[i+1]:=1 else g1[i+1]:=0;
if m3[i]=1 then
g1[i+2]:=1 else g1[i+2]:=0;
if m4[i]=1 then
g1[i+3]:=1 else g1[i+3]:=0;
if m5[i]=1 then
g1[i+4]:=1 else g1[i+4]:=0;
readln;
End.
Кто может помогите, можно на delphi думаю пойму
Последний раз редактировалось Kavil; 25.11.2011 в 10:39.
Всегда не любил эти ебнутые задачи на паскале. Блять, вот нет нормально написать условие что нужно сделать, что дано и что нужно вывести. Эти не нужные подробности условия меня ещё с олимпиад напрягали.
Объясни мне что делается с кубами нормально без всех этих детей и маркетинговых исследований, попробуй на делфи замутить
Последний раз редактировалось Sp3cial[For]You; 25.11.2011 в 23:25.
Добавлено через 3 часа 56 минут
Составитель задания и правда идиот. А ТС мог бы и картинку показать, с картинкой сразу стало все понятно и на прогу ушло 2 минуту и 15 строчек кода.
Цитата:
На следующем рисунке продемонстрировано, как выглядит расположение кубиков в коробке до и после одного поворота на 90 градусов.
Консольная прога на Delphi(под паскаль переделывается за 30 сек)
Код:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
vektor: array [1 .. 10] of integer;
matrix: array [1 .. 10] of array [1 .. 10] of integer;
i, j, l, n, k: integer;
begin
writeln('VVEDITE RAZMERNOST KOROBKI "N"');
readln(n);
writeln('VVEDITE CHISLO POVOROTOV "K"');
readln(k);
writeln('VVEDITE KOL-VO KUBIKOV V KAZDOM STOLBCHE');
for i := 1 to n do begin
readln(vektor[i]);
end;
for l := 1 to k do // выполняем цикл столько раз сколько переворотов
begin
// Обнуляем матрицу
for i := 1 to 10 do
for j := 1 to 10 do
matrix[i][j] := 0;
// Заполняем матрицу кубиками
for i := n downto 1 do
for j := 10 downto 11 - vektor[i] do
matrix[j][i] := 1;
// Обнуляем вектор
for i := 1 to 10 do
vektor[i] := 0;
// Условно переворачиваем матрицу(коробку) и заполняем новый вектор(результат)
for i := 1 to 10 do
for j := 1 to 10 do
vektor[11 - i] := vektor[11 - i] + matrix[i][j];
end;
writeln('');
writeln('ITOGOVOE POLOZHENIE KUBIKOV');
for i := 1 to n do
Write(vektor[i]);
readln;
end.
Последний раз редактировалось Тигрь; 26.11.2011 в 06:23.
Причина: Добавлено сообщение