Дано натуральное число 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; } |