Помогите пожалуйста решить задачи.
Вот одна из них:
Дан числовой массив А(35). Найдите, в массиве есть пара одинаковых чисел. Сколько одинаковых чисел, если они есть?
Tatjanka
А в массиве только одно число встречается не один раз? Что будет, если таких чисел несколько? Например:
1, 1, 1, 4, 4, 5, 5, 5, 3, 4, 9, 8, 7, 6, 5, 4, 3, 2, 1 ...
Ой, я задание неправильгно с эстонского перевела.
В задаче спрашивается есть ли в массиве пара одинаковых знаков и сколько таких пар?
volvo
помоги пожалуйста с решением. если конечно тебе не трудно. А за прошлие задачки огромное спасибо. У меня их приняли.
Что-то ты меня совсем запутала.
Цитата
есть ли в массиве пара одинаковых знаков
Приведи пример массива (не нужно 35, пусть будет 5 элементов, где такая пара есть, и где ее нет...)
volvo
Например
1 2 4 5 1
здесь одна пара - 1,1
2 2 2 2 3
две пары 2,2 и 2,2
но нужно писать только количество пар
mithquessir
1.12.2004 19:55
Ну, наверное так:
Код
var
num,i,j:integer;
a:array[1..35] of integer;
begin
randomize;
for i := 1 to 35 do
a[i] := random(100);
for i := 1 to 35 do
for j := i + 1 to 35 do
if a[i] = a[j] then
Inc(num);
for i := 1 to 35 do
begin
Write(a[i]:3);
end;
WriteLn;
WriteLn(num);
end.
mithquessir Давайте не пользоваться красным цветом?
Плюс к этому, проверяйте программу перед тем, как запостить сюда. Программа с тестовым примером:
Код
const n = 12;
const
a: array[1 .. n] of integer = (1, 2, 2, 3, 3, 6, 5, 8, 2, 3, 2, 3);
var
num,i,j:integer;
begin
for i := 1 to n do
for j := i + 1 to n do
if a[i] = a[j] then Inc(num);
for i := 1 to n do
begin Write(a[i]:3); end;
WriteLn;
WriteLn(num);
end.
выдает в результате 12, хотя здесь всего 4 пары...
Будьте внимательнее...
volvo
Значит етот код неправильно написан?
Tatjanka Вот, что мне пришло в голову:
Код
const
n = 12;
const
a: array[1 .. n] of integer = (1, 2, 2, 3, 3, 6, 5, 8, 2, 3, 2, 3);
var
i, j, T: integer;
pairTo, count: integer;
begin
for i := 1 to n do
for j := n downto i+1 do
if a[j-1] > a[j] then
begin
t := a[j-1]; a[j-1] := a[j]; a[j] := t;
end;
i := 1;
while i <= n-1 do
begin
pairto := a[i];
if a[i+1] = pairto then
begin
inc(count); inc(i, 2)
end
else inc(i)
end;
writeln(count);
end.
volvo Я пишу этот код, а у меня выдает 1, а это неправильный ответ
Вот я наверное подкинула тебе задачку, но я не специально, честно.
:flowers:
Tatjanka
Не может быть. Я только что еще раз прогнал тест. В ответе 4, как и есть на самом деле. Проверь еще раз, что все точно записала.
volvo
Спасибо огромноебвсе замечательно работает.
А можно еще одно задание послать. Или я уже наглею?
Tatjanka
Только в новую тему, если оно не связано с массивами ;)
mithquessir
1.12.2004 21:30
Извиняюсь за неправильный код.
А можно как-нибудь без сортировки?
mithquessir
Может и можно... Надо будет подумать...
ShadowWatcher
1.12.2004 22:00
Некрасивое решение, но должнл пахать:
Код
Type
TNum=Record
Number:Integer;
Count:Integer
End;
Var
Data:Array[1..35] Of TNum;
i,j,n:Integer;
Begin
Randomize();
For i:=1 To 35 Do
Begin
Data[i].Number := Random(10);
Data[i].Count := 1;
End;
For i:=1 To 34 Do
Begin
If Data[i].Count = 0 Then
Continue;
For j:=i+1 To 35 Do
If (Data[i].Number=Data[j].Number) Then
Begin
Inc(Data[i].Count);
Data[j].Count := 0
End
End;
n:=0;
For i:=1 To 35 Do
If Data[i].Count > 0 Then
Inc(n);
WriteLn('Totally ',n,' non-single numbers')
End.
ShadowWatcher
Неправильный результат (проверял при значениях 1 .. 12, т.е. повторов нет совершенно) - выдает "12".
ShadowWatcher
1.12.2004 22:45
Согласен.
Код
Type
TNum=Record
Number:Integer;
Count:Integer
End;
Var
Data:Array[1..35] Of TNum;
i,j,n:Integer;
Begin
Randomize();
For i:=1 To 35 Do
Begin
Data[i].Number := Random(10);
Data[i].Count := 1;
End;
For i:=1 To 34 Do
Begin
If Data[i].Count = 0 Then
Continue;
For j:=i+1 To 35 Do
If (Data[i].Number=Data[j].Number) Then
Begin
Inc(Data[i].Count);
Data[j].Count := 0
End
End;
n:=0;
For i:=1 To 35 Do
If Data[i].Count > 1 Then
Inc(n);
WriteLn('Totally ',n,' non-single numbers')
End.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста,
нажмите сюда.