![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Дано натуральное число. Верно ли, что данное число содержит три одинаковые цифры?
В моем понимании эта программа должна выглядеть как-то так. Помогите, пожалуйста, исправить, что неправильно. Мне кажется, что целесообразней присвоить переменной значение первой цифры и сравнить ее с остальными цифрами, ведь саму цифру, которая повторяется, выводить не требуется. Нет смысла проверять все цифры от 0 до 9, когда большей части из них вообще в числе не окажется. Код HTML:
|
|
#2
|
|||
|
|||
|
если у тебя n - это строка, то вот эта строчка
Код:
m:=n mod 10; во вторых, даже если сделаешь правильную проверку, надо об этом как-то сообщить пользователю. А проверка должна быть такой Код:
function proverka(const n:string):boolean;
var
k,i,j:integer;
begin
for i:=1 to length(n) do
begin
k:=0;//именно здесь;
for j:=1 to length(n) do
begin
if n[i]=n[j] then
inc(k);
end;//for j
if(k>=3) then begin//поставить строгое равенство,
//если нужно только три повторения
writeln(' digit ',n[i],' occurs ',k,' times');
result:=true;
exit;
end;
end;//for i
Result:=false;
end; |
|
#3
|
|||
|
|||
|
А я бы делал по другому. Всего цифр может быть 10 (0..9). Соответсвенно, можно просто в массиве посчитать количество цифр. Типа бин-сорт.
Понимаю, что фигово объяснил, код, наверное будет понятнее: Код:
function Proverka(n : Integer) : Boolean;
var
A : Array [0..9] Of Integer;
I : Integer;
begin
For I := 0 To 9 Do A[i] := 0; // инициализируем массив
// Теперь считаем цифры
While n > 0 Do
Begin
A[n mod 10] := A[n mod 10] + 1;
n := n div 10;
End;
for I := 0 To 9 Do
begin
Result := A[i] => 3; // поставить строгое равенство, если нужно только три повторения
If Result Then Break; // если есть цифра 3 раза (или больше), то выходим
end;
end; |
|
#4
|
|||
|
|||
|
Цитата:
Я все поняла, только если вводить число, в котором три раза встречаются две цифры, то выведется только одна цифра, которая встречается первая. При вводе числа 2241211, выводит, что число 2 встречается два раза, хотя тут есть ещё и 1. |
|
#5
|
||||
|
||||
|
lmikle, вываливаться нужно было сразу из первого цикла сделав в нем проверку на количество.
Appolinariya_, задача звучала так: Дано натуральное число. Верно ли, что данное число содержит три одинаковые цифры? Результатом решения этой задачи должен быть, на мой взгляд, ответ "Да" или "Нет". Никаких условий на количество и вывод цифр в ТЗ нет. Если подразумевалось посчитать кол-во цифр встречающихся больше 3 раз, и найти эти цифры - эти мысли следовало отразить в ТЗ. |
|
#6
|
||||
|
||||
|
А если совсем G-кодом
Код:
var c: array[0..9] of integer = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0); function proverka(const n: string): string; var i, b: integer; begin Result:= 'Neverno '; for i := 1 to Length(n)-1 do for b := 0 to 9 do if n[i] = IntToStr(b) then inc(c[b]); for b:= 0 to 9 do if c[b] = 3 then Result:= 'Verno '; end; |
|
#7
|
|||
|
|||
|
Цитата:
Можно, но тут закладка на будущую модификацию. С учетем того, что там макс 30 итераций - пофиг. Даже для Int64 будет ну, скажем 60-70 итераций. И еще один момент. Тут писал задачку для одного студозиуса. Ну и написал в стиле professional (как раз совмещение первичной обработки и сортировки в одном цикле), так потом пришлось объяснять отдельно, почему это будет работать и как устроено. Так что для студентов - чем проще, тем лучше. |