нужно напечатать число которое появляется в массиве наибольшее колл-во раз.
перед этим нужно ввести массив
вот мои наработки
#include<stdio.h>
#define N 10
int arr[N];
void FillArray(int *arr,int nCount)
{
int i;
for(i=0;i<nCount;i++)
{
printf("Fill array [%d]:\n",i+1);
scanf("%d",&arr[i]);
}
}
void FindHist(int *arr,int nCount)
{
int hist[15];//array of monim
int i;
int max=0;
for(i=0;i<10;++i)
{
hist[i]=0;
}
for(i=0;i<N;++i)
{
++hist[arr[i]];
}
for(i=0;i<10;i++)
{
max=i;
}
printf("Number is %d",max);
}
void main()
{
FillArray(arr,N);
FindHist(arr,N);
}
Другие языки программирования и технологии
помогите с задачей по си
Почему бы Вам его (или его копию) просто сперва обычным сишным qsort-ом не отсортировать? В отсортированном уже попроще будет работать. Да и сложность n*log(n) там будет вполне себе ничего, если гнаться за линейной задача не стоит.
я 5 минут пытался понять, чего ты ждешь от FindHist, но потерпел крах =(
Вы пытаетесь сделать массив, который будет накапливать количество вхождений определённого элемента, а потом вывести самый частый. Это у вас не получается, но таким путем идти и не надо.
Такой способ оправдывается, если у вас количество допустимых значений ограничено.
Но никто не мешает в массив arr ввести числа +/- 2 млрд.
Предлагаю другой способ:
1. Завести служебный массив int cnt[N].
2. Его значения cnt[i] = {количество (j): arr[i]=arr[j], j >=i} - количество дублей arr[i] в хвосте.
3. Потом по cnt искать индекс i_max, на котором достигается максимум
4. Вывести cnt[i_max] и arr[i_max]
Этап 2 - просто двойной цикл
for (i=0…(N-1)) { cnt[i] = 1; for (j=(i+1)…(N-1)) if (arr[i]==arr[j]) cnt[i]++; }
ЗЫ
paperrose попытался сделать без массива. У него НЕ ПОЛУЧИЛОСЬ.
Это тоже можно и в моём варианте:
После завершения for (j) можно сравнивать только что найденную cnt c предыдущей максимальной, как делает он.
Хотя вариант с массивом проще отлаживать и он нагляднее.
Такой способ оправдывается, если у вас количество допустимых значений ограничено.
Но никто не мешает в массив arr ввести числа +/- 2 млрд.
Предлагаю другой способ:
1. Завести служебный массив int cnt[N].
2. Его значения cnt[i] = {количество (j): arr[i]=arr[j], j >=i} - количество дублей arr[i] в хвосте.
3. Потом по cnt искать индекс i_max, на котором достигается максимум
4. Вывести cnt[i_max] и arr[i_max]
Этап 2 - просто двойной цикл
for (i=0…(N-1)) { cnt[i] = 1; for (j=(i+1)…(N-1)) if (arr[i]==arr[j]) cnt[i]++; }
ЗЫ
paperrose попытался сделать без массива. У него НЕ ПОЛУЧИЛОСЬ.
Это тоже можно и в моём варианте:
После завершения for (j) можно сравнивать только что найденную cnt c предыдущей максимальной, как делает он.
Хотя вариант с массивом проще отлаживать и он нагляднее.
void FindHist(int *arr,int nCount){
int i, result, max = 0, ind = 0;
for (i =0; i < N; i++) {
result = 0;
while ((--nCount) != -1)
if (arr[nCount] == value) result++;
if (result > max) {
max = result;
ind = i;
}
}
printf("Number is %d",arr[ind]);
}
int i, result, max = 0, ind = 0;
for (i =0; i < N; i++) {
result = 0;
while ((--nCount) != -1)
if (arr[nCount] == value) result++;
if (result > max) {
max = result;
ind = i;
}
}
printf("Number is %d",arr[ind]);
}
int check (int *arr, int nCount, int value) {
while ((--nCount) != -1)
if (arr[nCount] == value)
result++;
return result
}
void FindHist(int *arr,int nCount){
int i, result, max = 0, ind = 0;
for (i =0; i < N; i++) {
if (check(arr, nCount, arr[i])> max) {
max = result; ind = i;
}
}
printf("Number is %d",arr[ind]);
}
вроде так надо подправить код paperrose
while ((--nCount) != -1)
if (arr[nCount] == value)
result++;
return result
}
void FindHist(int *arr,int nCount){
int i, result, max = 0, ind = 0;
for (i =0; i < N; i++) {
if (check(arr, nCount, arr[i])> max) {
max = result; ind = i;
}
}
printf("Number is %d",arr[ind]);
}
вроде так надо подправить код paperrose
Похожие вопросы
- Помогите с задаче в СИ
- Помогите решить задачи на Си! Пожалуйста!!!
- помогите решить задачу по Си
- Помогите решить задачу на си++
- ПОМОГИТЕ РЕШИТЬ задачи по Си
- помогите решить задачи по Си. 2 неделю с ними бьюсь. выкладываю свое решение. скажите просто что не правильно
- Помогите с программированием на Си. Задача про треугольники
- Задача на Си шарпе помогите решить
- помогите....не представляю что делать с этой задачей....язык си....
- Помогите написать задачи Си++ !