Код, для решения задачи на JS
Задача:
В автоматически сгенерированном массиве целых чисел, найти число, которое встречается наиболее часто. Если таких чисел несколько, то вывести их все и указать их количество.
Код на JS:
let m;
let arr=new Array();
for(let i=0; i<m; i++){
arr[i]=Math.round(Math.random()*10);
}
console.log(,m, arr);
let count, max=0, number;
for(let i=0; i<m; i++){
count=0;
for(let j=0;j<m;j++){
if(arr[i] == arr[j]){
count++;
}
}
if(count > max){
max = count;
number = arr[i];
}
}
console.log(number + ": " + max);
Выводится только одно число и его количество, даже если с таким количеством не оно одно. Пытался как-то вывести через for и if, но тогда вообще не выводит.
Попытка:
let m=prompt("Введіть число");
console.log(m);
let arr=new Array();
for(let i=0; i<m; i++){
arr[i]=Math.round(Math.random()*10);
}
console.log("Введені дані:",m, arr);
let count, max=0, number;
for(let i=0; i<m; i++){
count=0;
for(let j=0;j<m;j++){
if(arr[i] == arr[j]){
count++;
}
}
if(count > max){
max = count;
}
}
for(let i=0;I<m; I++){
if(count==max) {
number=arr[I];
console.log(number + ": " + max);
}
}
Ответы (2 шт):
Автор решения: yar85
→ Ссылка
Проблема твоего кода в том, что он:
- не учитывает чувствительность JS к регистру имен (например,
iиIэто разные идентификаторы) - содержит лишние вложенные циклы (вместо того чтобы каждый раз пробегать массив от начала - можно просто посчитать повторы чисел, и отсортировать результат)
- незакончен (для того чтобы научиться быстрее, всегда старайся выполнять упражнения полностью... если даже кодом возвращается неверный ответ - дописывай задуманный алгоритм до конца, не бросай на полпути).
Решение на современном JavaScript, пошаговое и (надеюсь) более-менее понятное:
const maxNumVal = 9,
numbersCnt = 16; // +prompt('Введите количество чисел') || 0;
if (numbersCnt > 0) {
const numbers = Array.from({ length: numbersCnt },
() => Math.floor(Math.random() * 10)
);
console.log(`Числа (${numbersCnt}): ${numbers.join(', ')}`);
const stats = numbers.reduce((rslt, number) => {
rslt[number] = (rslt[number] || 0) + 1;
return rslt;
}, {});
const sorted = Object.entries(stats).sort(([, cntA], [, cntB]) => cntB - cntA),
[, maxCnt] = sorted[0];
trimToIdx = sorted.findIndex(([, cnt]) => cnt < maxCnt);
if (trimToIdx >= 0)
sorted.length = trimToIdx;
console.log(
`Наиболее часто, а именно ${maxCnt} раз(а), встреча`
+ ((sorted.length > 1) ? 'ются эти числа: ' : 'ется одно число ')
+ sorted.map(([number]) => number).join(', ')
);
}
Автор решения: Qwertiy
→ Ссылка
var a = Array(100 + Math.random() * 9900 | 0).fill().map(() => Math.random() * 1000 | 0)
var c = a.reduce((r, x) => (r[x] = ~~r[x] + 1, r), Object.create(null))
var m = Math.max(...Object.values(c))
var b = Object.entries(c).filter(([x, c]) => c === m).map(([x]) => +x)
console.log(m, b)