Дано натуральное число n. Выяснить,
сколько раз в этом числе встречается его максимальная цифра (за один просмотр
числа). Например в числе 673757 максимальная цифра 7 и встречается она 3 раза, а в числе 4935 максимальная цифра 9 и
встречается она 1 раз.
Первый алгоритм,
который приходит в голову – найти сначала максимальную цифру, как мы это
сделали в задаче 7, а затем заново просматривать цифры числа и считать, сколько
раз эта максимальная цифра повторится. Но в условии сказано, чтобы мы исходное число просматривали только один раз.
А этот алгоритм уже немного заковыристее. Обозначим само максимальное число qmax, а количество максимальных k. Понятно, что обе эти переменные в начале
должны быть равны 0. А сам алгоритм удивительно прост: если очередная цифра
больше максимальной, то эта цифра становится максимальной и максимальная цифра
пока одна, то есть k делаем равной 1.
Если же очередная цифра равна максимальной, то увеличиваем k на 1. Эти
действия выполняются в программе в
строках 11 – 13.
Отметим,
что INC(k); это тоже самое, что и k := k + 1; ( а в С++ это k++ )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
Program A2_8;
Var
n,n1:int64;
q,qmax,k:integer;
begin
readln(n);
n1:=n; k:=1;
qmax:=0;
while
(n1<>0) do
begin
q:=n1
mod 10;
if
(q>qmax) then
begin qmax:=q; k:=1; end
else if
(q=qmax)then INC(k);
n1:=n1
div 10;
end;
writeln(k);
readln;
end.
|
// Program A2.8;
#include <iostream>
using namespace std;
int main()
{ long long n,n1;
int
q,qmax=0,k=1;
cin>>n;
n1=n;
while(n1)
{ q=n1%10;
if
(q>qmax) {qmax=q;k=1;}
else
if( q==qmax)k++;
n1=n1/10;
}cout<<k<<endl;
return 0;
}
|
|