Консультация № 139961
14.07.2008, 15:15
0.00 руб.
0 62 2
Здравствуйте, уважаемые эксперты! Сегодня вот такие задачи:
1. Дана последовательность из n неторицательных целых чисел. На каждом шаге эти числа упорядочиваются по возрастанию и каждые два соседних числа заменяют на разность большего и меньшего. Эту операцию повторяют до тех пор, пока не останется одно число. Напишите программу, которая моделирует описанный процесс.
6
26 65 95 43 99 57
17 14 8 30 4
4 6 3 13
1 2 7
1 5
4
мой неисправный код в приложении.
2. С клавиатуры вводятся два числа x и у - координаты клетки на шахматном поле. Определите, какое минимальное количество ходов конём нужно сделать, чтобы попасть из клетки (1, 1) в клетку (х, у).
3 4
3
3. С клавиатуры вводятся два натуральных числа а и b. Определите, сколько всего чисел на отрезке [a, b], у которых все цифры различны.
4. С клавиатуры вводятся пять различных чисел. Найдите медиану (среднее по величине число).
5 0 7 3 4
4
код в приложении
5. С клавиатуры вводится натуральное число n. Напишите программу, которая рисует равнобедренный треугольник из звёздочек с высотой и основанием, равным n.
6
*
* *
* *
* *
* *
* * * * *
6. Дана последовательность чисел, заканчивающихся нулём. У каждого числа сначала записано количество цифр в этом числе, а потом через пробел - сами цифры. Выведите сначала количество чисел в последовательности, а потом сами числа.
3 4 7 3 2 8 9 3 5 0 5 0
3
473 89 505
7. С клавиатуры вводятся два натуральных числа а и b. Выведите все простые числа на отрезке [a, b] в порядке возрастания суммы цифр.
150 190
151 163 181 173 157 167 179
8. Треугольник Паскаля строится следующим образом. Первая строка состоит из одного числа, равного единице. Каждая следующая содержит на одно число больше, чем предыдущая, Первое и последнее из этих чисел равны 1, а все остальные вычисляются как сумма числа, сотящего в предыдущей строке над ним числа, стоящего в предыдущей строке слева от него. По заданному числу n выведите первые n строк треугольника Паскаля.
5
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1

Приложение:
Var n, i, j, k, t: Integer; x: Array[1..100] Of Integer;Procedure ReadData;Begin ReadLn(n); For i := 1 To n Do Begin Read(x[i]); End;End;Procedure WriteData;Var a: Integer;Begin a := 0; For j := 1 To n-a Do Begin Write(x[j]); End; WriteLn; Inc(a);End;Begin ReadData; For i := 1 To n Do Begin For j := 1 To n-1 Do Begin For k := 1 To n-1 Do Begin If (x[k] > x[k+1]) Then Begin t := x[k]; x[k] := x[k+1]; x[k+1] := t; End; End; End; For j := n-(i-1) DownTo 1 Do Begin x[j] := x[j]-x[j+1]; End; WriteData; End; WriteLn; ReadLn;End.Var x: Array[1..5] Of Integer; t: Array[1..3] Of Integer; i, j, med, min, max, index: Integer;Procedure ReadData;Begin For i := 1 To 5 Do Begin Read(x[i]); End;End;Procedure WriteData;Begin WriteLn(med); ReadLn;End;Begin ReadData; min := x[1]; j := 1; For i := 1 To 5 Do Begin If (x[i] < min) Then Begin min := x[i]; index := i; End; End; x[index] := -32767; max := x[1]; For i := 1 To 5 Do Begin If (x[i] > max) Then Begin max := x[i]; index := i; End; End; x[index] := 32767; For i := 1 To 5 Do Begin If ((x[i] <> 32767) And (x[i] <> -32767)) Then Begin t[j] := x[i]; Inc(j); End; End; min := t[1]; For i := 1 To 3 Do Begin If (t[i] < min) Then Begin min := t[i]; index := i; End; End; t[index] := -32767; max := t[1]; For i := 1 To 3 Do Begin If (t[i] > max) Then Begin max := t[i]; index := i; End; End; t[index] := 32767; For i := 1 To 3 Do Begin If ((t[i] <> -32767) And (t[i] <> 32767)) Then Begin med := t[i]; End; End; WriteData;End.

Обсуждение

давно
Профессор
401888
1232
19.07.2008, 10:53
общий
Что-то от жары у меня совсем мозги расплавились. Наконец-то дошло, что Вам нужно. Задачу я еще раз в ответе исправил, но эту программу я уже посылал Вам в марте, Вы у себя в задачах порядок наведите.
давно
Профессор
401888
1232
19.07.2008, 11:50
общий
Между делом решил задачу №6. Внес исправления в ответ.
Неизвестный
19.07.2008, 14:00
общий
спасибо, Юрий Борисович!
давно
Старший Модератор
31795
6196
21.07.2008, 19:17
общий
Хощенко Артём Владимирович :
Шахматы в приложении, если не понятно спрашивайте
Код:
 uses crt;
var
x,y,z:array[1..64]of integer;
xi,yi,i,j,stepMix:integer;
begin
{вводим координаты точки с контролем}
repeat
write('Enter x:');
readln(xi);
until (xi>0)and(xi<9);
{вводим координаты точки с контролем}
repeat
write('Enter y:');
readln(yi);
until (yi>0)and(yi<9);
{начальные значения первой точки}
i:=1;
x[i]:=1;{по горизонтали}
y[i]:=1;{по вертикали}
z[i]:=8;{возможное число ходов}
stepMix:=65;{максимальное возможное количество ходов}
repeat
case z[i]of
{ все возможные варианты ходов}
8:begin x[i+1]:=x[i]+1; y[i+1]:=y[i]+2;end;
7:begin x[i+1]:=x[i]+2; y[i+1]:=y[i]+1;end;
6:begin x[i+1]:=x[i]+2; y[i+1]:=y[i]-1;end;
5:begin x[i+1]:=x[i]+1; y[i+1]:=y[i]-2;end;
4:begin x[i+1]:=x[i]-1; y[i+1]:=y[i]-2;end;
3:begin x[i+1]:=x[i]-2; y[i+1]:=y[i]-1;end;
2:begin x[i+1]:=x[i]-2; y[i+1]:=y[i]+1;end;
1:begin x[i+1]:=x[i]-1; y[i+1]:=y[i]+2;end;
{эти строчки можно исключить, но безних я не пробывал}
-3,
-2,
-1,
0:begin dec(i);end;
end;
{проверяем совпадение с нужной точкой }
if(x[i+1]=xi)and(y[i+1]=yi)then
begin
if stepMix>=i then
begin
{контрольный вывод всех ходов}
stepMix:=i;
for j:=1 to i+1 do write(x[j]:3);writeln('=':3,i:5);
for j:=1 to i+1 do write(y[j]:3);writeln('=':3,i:5,z[i]:5);
ReadKey;
end;
z[i]:=0;
end;
{провеяем попадание в доску 8х8}
if(x[i+1]>0)and(x[i+1]<9)and(y[i+1]>0)and(y[i+1]<9)and(z[i]>0)then
begin
{проверяем повторную точку}
j:=1;
while(x[j]<>x[i+1])and(y[j]<>y[i+1])do
inc(j);
{уменьшаем количестово ходов для текущей точки}
dec(z[i]);
if z[i]<0 then z[i]:=0;
{если равно, то нет совпадающих координат теперь новая текущая точка}
if j=(i+1) then
begin
inc(i);
z[i]:=8;
end;
end
else
begin
{точка вышла за пределы доски}
dec(z[i]);
if z[i]<0 then z[i]:=0;
end;
{контрольный вывод
writeln(i:5,z[i]:5,stepMix:5);
{цикл коррективки возможных ходов}
while (z[i]<=0)and(i>0) do dec(i);
until i=0;
end.

Удачи!
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
22.07.2008, 07:33
общий
а что такое case z[i]of { все возможные варианты ходов} 8:begin x[i+1]:=x[i]+1; y[i+1]:=y[i]+2;end; 7:begin x[i+1]:=x[i]+2; y[i+1]:=y[i]+1;end; 6:begin x[i+1]:=x[i]+2; y[i+1]:=y[i]-1;end; 5:begin x[i+1]:=x[i]+1; y[i+1]:=y[i]-2;end; 4:begin x[i+1]:=x[i]-1; y[i+1]:=y[i]-2;end; 3:begin x[i+1]:=x[i]-2; y[i+1]:=y[i]-1;end; 2:begin x[i+1]:=x[i]-2; y[i+1]:=y[i]+1;end; 1:begin x[i+1]:=x[i]-1; y[i+1]:=y[i]+2;end;? мы такого не учили. можно как-нибудь без этого (хотя сам даже на знаю как :() и, Юрий Борисович, когда вы мне в первый раз решали эту задачу, вы пользовались средствами, которые мне разрешены (я имею ввиду Integer и одномерные массивы (что такое Char? объясните пожалуйста))
давно
Профессор
401888
1232
22.07.2008, 08:04
общий
Char - это символьный тип. Все, что мы вводим с клавиатуры, это символы. В задаче используется двухмерный массив символов (*). Ну а как можно не знать основные типы, используемые в Паскаль после полугода изучения оного, мне абсолютно не понятно. Прочитайте хоть одну книгу по Паскалю. Описание типов идет обычно ближе к началу книги.
В марте делал без символьного массива, но структура при этом была все-таки не одномерная, как Вы пишете, а двумерная, иначе как Вы построите фигуру на плоскости.
Вот еще раз Вам мартовский вариант этой задачи, хотя все-равно не понимаю, зачем Вы задаете этот вопрос, если задача у Вас есть?
Код:
 program treugolnik;
var n,i,j:integer;
begin
write('n=');readln(n);
for i:=1 to n do
begin
for j:=1 to 2*n-1 do
begin
if (j=n-i+1)or(j=n+i-1) then
begin
write('*')
end
else if (i=n)and(j mod 2=1) then
begin
write('*');
end
else write(' ')
end;
writeln;
end;
readln;
end.

P.S. Для публикации кода испрользуйте теги - код. Это над текстовым полем стоят иконки, так {а} - это тег кода.
давно
Старший Модератор
31795
6196
22.07.2008, 10:46
общий
Хощенко Артём Владимирович :
Код:
  Case (зарезервированное слово)
Оператор Case состоит из выражения (селектора) и списка операторов, каждый из которых выполнится в определенном случае.
Синтаксис:
Case выражение Of
вариант : оператор;
...
вариант : оператор;
End
или
Case выражение Of
вариант : оператор;
...
вариант : оператор;
Else оператор
End
Замечания:
"вариант" состоит из одной или большего количества констант или диапазонов, разделенных запятыми.
Часть "Else" является необязательной.

Это стандартный оператор ветвления и является сокращенной записью каскада операторов IF :
Код:
if <вариант> 
then <оператор>
else if <вариант>
then <оператор>
else if <вариант>
then <оператор>
else <оператор>;
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
23.07.2008, 06:14
общий
Уважаемые эксперты, не могли бы вы мне решить ещё одну задачу?
На шахматной доске стоят два ферзя. Определите, бьют ли они друг друга. Местоположение ферзей задаётся четырьмя числами, определяющими их координаты на шахматной доске.
2 4
3 8
Ферзи не бьют друг друга
и ещё. Задачу про последовательность можно решить как-нибудь по-другому? (знаю, Юрий Борисович, будете возмущаться) но всё-таки. Через массив можно?
давно
Профессор
401888
1232
23.07.2008, 09:13
общий
Задача о ферзях.
Пусть х1 и у1 координаты 1 ферзя, х2 и у2 - 2 ферзя. Координаты - числа >0 и <9.
Ферзи бьют друг друга, если
1. Они на одной горизонтали х1=х2
2. На одной вертикали у1=у2.
3. На одной диагонали, параллельной побочной х1+у1=х2+у2
4. На одной диагонали, параллельной главной х1+у2=х2+у1
т.е. if (х1=х2 ) or (у1=у2) or (х1+у1=х2+у2) or (х1+у2=х2+у1)
then writeln('Бьются!') else writeln(Не бьются!');
По сути вся программа. При вводе исходных данных (х1,х2,у1,у2) сделаете проверку ввода как вам написал Константин Николаевич.
Пора начинать писать самому. Про задачу на последовательность Вы правильно догадались. Можно конечно и через массивы попробовать, но это типичная задача на строки.

давно
Профессор
401888
1232
23.07.2008, 11:41
общий
Пожалуйста через массивы.
Код:
uses crt;
const s:array[1..12] of byte=(3,4,7,3,2,8,9,3,5,1,5,0);
var i,k,j:integer;
a:array[1..20]of integer;
begin
clrscr;
for i:=1 to 12 do
write(s[i],' ');
writeln;
i:=1;k:=0;
while s[i]<>0 do
begin
k:=k+1;
for j:=i+1 to i+s[i] do
a[k]:=a[k]*10+s[j];
i:=i+s[i]+1;
end;
writeln;
writeln('k=',k);
for i:=1 to k do
write(a[i],' ');
readln
end.
Неизвестный
24.07.2008, 06:38
общий
а что значит
Код:
 const s:array[1..12] of byte=(3,4,7,3,2,8,9,3,5,1,5,0); 
? constanta - постоянная? а byte=(3, 4, 7 ,3 ....) что это такое? спрашивая для того, чтобы подогнать под свои рамки. про ферзи спасибо. а что делает программа с конём? что за числа она выводит? какую-то последовательность чисел? объясните пожалуйста.
давно
Профессор
401888
1232
24.07.2008, 07:43
общий
const это служебное слово, обозначающее константу, т.е. постоянную величину.
byte целочисленный тип (как интежер) содержащий целые положительные числа в интервале [0,256];
(3, 4, 7 ,3 ....) это ваша последовательность чисел, записанная в виде массива-константы.
Таким образом мы описали последовательность как целочисленный массив типа byte, состоящий из 12 данных по условию элементов.
давно
Старший Модератор
31795
6196
24.07.2008, 11:10
общий
Код:
 проверяем совпадение с нужной точкой }
if(x[i+1]=xi)and(y[i+1]=yi)then
begin
if stepMix>=i then
begin
{контрольный вывод всех ходов}
stepMix:=i;
for j:=1 to i+1 do write(x[j]:3);writeln('=':3,i:5);
for j:=1 to i+1 do write(y[j]:3);writeln('=':3,i:5,z[i]:5);
ReadKey;
end;
z[i]:=0;
end;

этот код проверяет достигли ли нужной клетки, если достигли то выводится вся последовательность ходов или по другому путь пройденный конем от точки 1.1 до точки xi.yi, верхний ряд координата Х, нижний координата У, вывод происходит каждый раз когда найден более короткий путь.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
25.07.2008, 03:33
общий
в задаче про последовательность предполагается, что она необязательно будет длиной 12 знаков, поэтому последовательность нельзя делать константой. Считывание я делаю в процедуре ReadData (это придаёт некоторую универсальность программе). Если я сделаю по-своему работоспособность программы не изменится? Сейчас проверю. Про задачу с конём. А как можно сделать, чтобы просто выводилось меньшее количество ходов?
Неизвестный
25.07.2008, 03:43
общий
а вот как раз-то с процедурой считывания и загвоздка! как определить, где кончится последовательность? ведь ноль может быть и в числе, а точной длины последовательности неизвестно
Неизвестный
25.07.2008, 03:57
общий
а почему в задаче про треугольник Паскаля массив всего лишь 1..20, 1..20? больше не надо? или только за зря будет память занимать?
давно
Профессор
401888
1232
25.07.2008, 07:59
общий
ведь ноль может быть и в числе, а точной длины последовательности неизвестно

Я Вам уже писал
По условию задачи последовательность заканчивается нулем, значит внутри ее нулей быть не может, т.к. если вводить последовательность с клавиатуры, то при вводе ноля ввод должен прекратится.

Будьте внимательней, иначе для чего пишем.
В задаче про треугольник Паскаля. А Вы попробуйте задать n=20 и посмотрите что получится. Нужно ведь исходить из возможностей Паскаля по памяти и по способу отображения результатов.
давно
Старший Модератор
31795
6196
25.07.2008, 11:05
общий
О конях:
можно только если нужно выводить ходы, то ещё 2-а дополнительных массива нужно.
если ходы не нужны то только вывод переменной stepMix после всех циклов, а остальные выводы убрать.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
28.07.2008, 16:17
общий
Цитата:
ведь ноль может быть и в числе, а точной длины последовательности неизвестно


Я Вам уже писал

Извините меня, напишите ещё раз. Просто так условие написали, но всегда в таких задачах имеется в виду, что приходится считывать последовательность. Про треугольник Паскаля. Можно обойтись и без двухмерных массивов. просто иметь массив, в который будет записываться предыдущая строка. Ведь так? сегодня уже поздно, завтра с утреца переделаю. О конях: тоже переделаю задачу с утра. Всем ещё раз спасибо.
давно
Профессор
401888
1232
28.07.2008, 17:43
общий
Извините меня, напишите ещё раз.

Не понял, что еще раз написать. Треугольник Паскаля можно решить рекурсивно, используя один массив, но это Вам будет сложно, так как рекурсию Вы еще не проходили, а изображение на плоскости двухмерной фигуры с помощью двухмерного массива это понятно и естественно.
Неизвестный
29.07.2008, 05:27
общий
вот примерный код
Код:
 Var
i, j, s, n: Integer;
t, x: Array[1..100] Of Integer;

Procedure ReadData;
Begin
ReadLn(n);
End;

Procedure OverWrite;
Begin
For j := 1 To s Do
Begin
t[j] := x[j];
End;
End;

Procedure WriteData;
Begin
For j := 1 To s Do
Begin
Write(x[j], ' ');
End;
End;

Begin
ReadData;
s := 1;
For i := 1 To n Do
Begin
OverWrite;
WriteData;
For j := 1 To s-1 Do
Begin
If (j <> 1) Then
Begin
x[j] := t[j-1] + t[j];
End;
End;
x[s] := 1;
WriteLn;
End;
ReadLn;
End.

смысл именно в том, что мы запоминаем предыдущую строку в одном массиве, а следующую строку делаем в другом. Только что-то у меня не получается полностью воплотить эту идею.
давно
Профессор
401888
1232
29.07.2008, 07:23
общий
Если у Вас будет 20 строк, Вам придется 20 раз составлять новый массив и выводить его на экран. Как только Вы организуете этот процесс в цикл, у Вас автоматически возникнет двухмерная конструкция типа:
от 1 до 20 делаем
1.создаем новй массив
2.выводим его на экран
конец
Это и есть двухмерный массив.
Неизвестный
29.07.2008, 12:08
общий
не-а. это два РАЗНЫХ массива.
давно
Старший Модератор
31795
6196
29.07.2008, 13:32
общий
Хощенко Артём Владимирович :

Жаль, что Вы ещё рекурсию не проходили, код получается простой до безобразия и без всяких там массивов

Код:
 var n,i,j:integer;
{рекурсивная функция}
function F(x,y:integer):integer;
begin
{условие выхода из рекурсии}
if (x=1)or(y=1)then F:=1
{получаем следующий элемент}
else F:=F(x-1,y)+F(x,y-1);
end;
begin
{вводим число}
repeat
write('Enter N:');
readln(n);
until n>0;
{цикл по строкам}
for i:=1 to n do
begin
{цикл в строке}
for j:=1 to i do write(F(j,i-j+1):3);
writeln;
end;
end.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
30.07.2008, 04:59
общий
про треугольник Паскаля: подправил свой код, только откуда-то вылазиют лишние 0. Не знаю, как их убрать.
Код:
 Var
i, j, s, n: Integer;
t, x: Array[1..100] Of Integer;

Procedure ReadData;
Begin
ReadLn(n);
End;

Procedure OverWrite;
Begin
For j := 1 To s Do
Begin
t[j] := x[j];
End;
End;

Procedure WriteData;
Begin
For j := 1 To s Do
Begin
Write(x[j], ' ');
End;
End;

Begin
ReadData;
s := 1;
For i := 1 To n+1 Do
Begin
OverWrite;
WriteData;
For j := 1 To s Do
Begin
If (j <> 1) Then
Begin
x[j] := t[j-1] + t[j];
End;
End;
x[s] := 1;
WriteLn;
Inc(s);
End;
ReadLn;
End.

вот что мне подсказали по поводу задачи про коней:
Один из возможных вариантов - перебрать все пути и выбрать кратчайший.
Более изящный способ - постепенно для каждой клетки доски определить
длину кратчайшего пути, так мы определим и "расстояние" до нужной нам
клетки. Могу лишь намекнуть, что клетки, до которых "расстояние" равно
одному сразу же дают понять, до каких клеток "расстояние" будет равно
двум, и так далее.

надо будет ещё подумать.
Неизвестный
30.07.2008, 05:20
общий
и чуть не забыл, вот ещё одна задача:
с клавиатуры вводятся два натуральных числа а и b. Определите, сколько всего чисел на отрезке [a, b], у которых все числа различны.
105 115
9
вот мой код (k1 - счётчик всех чисел между а и б, k2 - счётчик чисел, у которых есть одинаковые цифры):
Код:
 Var
a, b, i, k1, k2, ans: Integer;

Procedure ReadData;
Begin
ReadLn(a, b);
End;

Procedure WriteData;
Begin
WriteLn(ans);
ReadLn;
End;

Function Check(i: Integer): Boolean;
Var
j, k, t: Integer;
res: Boolean;
x: Array[1..5] Of Integer;
Begin
j := 1;
While (i <> 0) Do
Begin
x[j] := i Mod 10;
Inc(j);
i := i Div 10;
End;
For j := 1 To 4 Do
Begin
For k := 1 To 4 Do
Begin
If (x[j] > x[j+1]) Then
Begin
t := x[k];
x[k] := x[k+1];
x[k+1] := t;
End;
End;
End;
For j := 1 To 4 Do
Begin
If (x[j] = x[j+1]) Then
Begin
res := TRUE;
End;
End;
Check := res;
End;

Begin
ReadData;
For i := a To b Do
Begin
Inc(k1);
If (Check(i)) Then
Begin
Inc(k2);
End;
End;
ans := k1-k2;
WriteData;
End.


намутил чего то я там.
давно
Профессор
401888
1232
30.07.2008, 08:35
общий
По треугольнику:
Поскольку у Вас нет исходного массива, от которого формируются последующие массивы, то собственно формирование треугольника начинается с третьей строки, до этого мы только вводим единицы, сначала одну, потом две.
Цикл построения треугольника начинается с ноля, т.к. первая строка это коэффициенты бинома нулевой степени (1), вторая – первой степени (1+1) и т.д.
Поскольку программа сделана так, что выводится не текущий массив, а предыдущий, нужно выводить не от 1 to s, а от 1 to s-1. Из-за этого и цикл у Вас до n+1, хотя строка n+1 не выводится.
Еще замечание. При входе в программу пользователь видит пустой экран и естественно не знает что ему делать. Поэтому в процедурк ввода нужно подсказывать пользователю.
Всвязи с этим нужно внести следующие изменения в программу:

Код:
 uses crt;
Var i, j, s, n: Integer;
t, x: Array[1..100] Of Integer;
Procedure ReadData;
Begin
write('Vvedite razmer treugolnika n=');
ReadLn(n);
End;
Procedure OverWrite;
Begin
For j := 1 To s Do
t[j] := x[j];
End;
Procedure WriteData;
Begin
For j := 1 To s-1 Do
Write(x[j], ' ');
end;
Begin
clrscr;
ReadData;
s := 1;
For i := 0 To n+1 Do
Begin
OverWrite;
WriteData;
For j := 1 To s Do
x[j] := t[j-1] + t[j];
x[1]:=1;
x[s]:=1;
WriteLn;
Inc(s);
End;
ReadLn;
End.

В этой программе Вы пытаетесь сделать то же, что и в коде Константина Николаевича, только очень неэффективно. Ничего более изящного, чем рекурсивный способ решения, Вы все равно не изобретете. Кстати, Вы могли бы и сами написать такой же код, в интернете есть этот алгоритм с пояснениями и даже с цветными картинками, и Вы могли бы сослатся на эту информацию.

По новой задаче кое-что непонятно. Нужно подсчитать количество чисел из интервала [a,b] у которых все цифры разные?
Если так, то почему в вашем примере ответ 9 а не 5? 105,106,107,108,109 у остальных цифры повторяются.
Неизвестный
04.08.2008, 03:45
общий
я пытаюсь сделать не более изящно, а подогнать под свои рамки. за треугольник спасибо.
Неизвестный
04.08.2008, 03:49
общий
Вот мой подправленный код (с процедурой реаддата делать ничего не стал - те, кто будут проверять, знают, что вводить)
Код:
  Var
i, j, s, n: Integer;
t, x: Array[1..100] Of Integer;

Procedure ReadData;
Begin
ReadLn(n);
End;

Procedure OverWrite;
Begin
For j := 1 To s Do
Begin
t[j] := x[j];
End;
End;

Procedure WriteData;
Begin
For j := 1 To s-1 Do
Begin
Write(x[j], ' ');
End;
End;

Begin
ReadData;
s := 1;
x[1] := 1;
For i := 1 To n+1 Do
Begin
OverWrite;
WriteData;
For j := 1 To s Do
Begin
If (j <> 1) Then
Begin
x[j] := t[j-1] + t[j];
End;
End;
x[s] := 1;
If (i <> 1) Then
Begin
WriteLn;
End;
Inc(s);
End;
ReadLn;
End.
Неизвестный
04.08.2008, 04:37
общий
насчёт задачи о коне: ещё изящный способ: использовать волновый подход. всё поле представить в виде массива. для каждой клетки записать расстояние (кол-во ходов) до нёё. как это сделать - не знаю. сроки выполнения задач прошли, надо быстрее делать и оформлять. дайте прочитать про волновый подход.
Форма ответа