Написать программу в с++, определяющую, какое число чаще других встречается в последовательности целых случайных чисел. для генерации чисел использовать линейный конгруэнтный метод.
#include <iostream> using namespace std; const int n = 15;
double congruential(int &x) // функция генерации псевдослучайных чисел { const int m = 100, // генерация псевдослучайных чисел в диапазоне значений от 0 до 100 (выбирается случайно m > 0) a = 8, // множитель (выбирается случайно 0 <= a <= m) inc = 65; // инкрементирующее значение (выбирается случайно 0 <= inc <= m) x = ((a * x) + inc) % m; // формула линейного конгруэнтного метода генерации псевдослучайных чисел return (x / double(m)); }
int main() { double arr[n]; double num, frq, max_frq; int x0 = 20; for (int i=0; i<n; i++) { arr[i] = congruential(x0); cout << arr[i] << " "; }
num = arr[0]; max_frq = 1; for (int i=0; i < n-1; i++) { frq = 1; for (int k = i+1; k<n; k++) if (arr[i] == arr[k]) frq += 1; if (frq > max_frq) { max_frq = frq; num = arr[i]; } } cout << endl; if (max_frq > 1) cout << max_frq << " : " << num << endl; else cout << "All uniqum" << endl; return 0; }
1. Если число в двоичной системе заканчивается на 00, значит оно кратно 4-м в десятичной системе. То есть нужно определить, сколько существует двузначных чисел, которые в квадрате кратны 4-м.10*10 Квадрат числа будет кратен четырем в том случае, если это число чётное, то есть ответом будет кол-во четных двузначных чисел, а это 45.
2. 3 бита это 2^3 = 1 из 8 вариантов. Значит четверки - это 1/8 от всех оценок, 64/8=8 четверок
3. Всего существует 5 четных цифр (включая 0). Из них можно составить 5^4 = 625 различных четырёхзначных комбинаций.
Рекурсивный подход.(Символы тоже удаляет) function grad(s:string):string; var i:byte; detect:boolean; begin while i < length(s) - 2 do begin inc(i); if (s[i] = s[i+1]) and (s[i] = s[i+2]) then {проверка последовательности из 3 елементов} begin delete(s,i,3); {если да - удаляем их} detect:=True; {логическая переменная регистрирует изменение строки} end;end; if detect = True then s:=grad(s); {если строку изменили , проверяем не появились ли там еще последовальности} grad:=s; end;
var s:string; begin readln(s); writeln(grad(s)); end.
using namespace std;
const int n = 15;
double congruential(int &x) // функция генерации псевдослучайных чисел
{
const int m = 100, // генерация псевдослучайных чисел в диапазоне
значений от 0 до 100 (выбирается случайно m > 0)
a = 8, // множитель (выбирается случайно 0 <= a <= m)
inc = 65; // инкрементирующее значение (выбирается случайно 0
<= inc <= m)
x = ((a * x) + inc) % m; // формула линейного конгруэнтного метода
генерации псевдослучайных чисел
return (x / double(m));
}
int main()
{
double arr[n];
double num, frq, max_frq;
int x0 = 20;
for (int i=0; i<n; i++) {
arr[i] = congruential(x0);
cout << arr[i] << " ";
}
num = arr[0];
max_frq = 1;
for (int i=0; i < n-1; i++) {
frq = 1;
for (int k = i+1; k<n; k++)
if (arr[i] == arr[k])
frq += 1;
if (frq > max_frq) {
max_frq = frq;
num = arr[i];
}
}
cout << endl;
if (max_frq > 1)
cout << max_frq << " : " << num << endl;
else
cout << "All uniqum" << endl;
return 0;
}