![]() |
|
|
Регистрация | << Правила форума >> | 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 (как раз совмещение первичной обработки и сортировки в одном цикле), так потом пришлось объяснять отдельно, почему это будет работать и как устроено. Так что для студентов - чем проще, тем лучше. |