mmmira Ответов: 1

Как вывести наименьшее количество чисел так, чтобы остальные числа имели равное значение


Enter N integers, print the least number of numbers that have to be removed, so that the remaining numbers have equal values
For example :
Input: 3 1 5 3 3 2
Output: 3


Что я уже пробовал:

#include <iostream>
using namespace std;
int main()
{
int N,count=0;
int max=0;
cin>>N;
int a[N];
for(int i=1;i<=N;i++)
cin>>a[i];
for(int i=1;i<=N;i++)
{for(int j=1;j<=N;j++)
if(a[i]==a[j])
count++;
if(count>max)
max=count;
count=0;
}
cout<<N-max;
return 0;
}

1 Ответов

Рейтинг:
0

OriginalGriff

Это твое домашнее задание, так что я не дам тебе никакого кода!
Но сначала: сделайте отступ в вашем коде - это делает его намного более читабельным, и что Менас его легче модифицировать.
Например, ваш код представлен следующим образом:

#include <iostream>
using namespace std;
int main()
{
int N,count=0;
int max=0;
cin>>N;
int a[N];
for(int i=1;i<=N;i++)
cin>>a[i];
for(int i=1;i<=N;i++)
{for(int j=1;j<=N;j++)
if(a[i]==a[j])
count++;
if(count>max)
max=count;
count=0;
}
cout<<N-max;
return 0;
}

Изрезанный:
#include <iostream>
using namespace std;
int main()
    {
    int N,count=0;
    int max=0;
    cin>>N;
    int a[N];
    for(int i=1;i<=N;i++)
        cin>>a[i];
    for(int i=1;i<=N;i++)
        {
        for(int j=1;j<=N;j++)
            if(a[i]==a[j])
                count++;
        if(count>max)
            max=count;
        count=0;
        }
    cout<<N-max;
    return 0;
    }
Теперь вы можете гораздо легче увидеть, что делают циклы. Я бы также посоветовал вам, как новичку, всегда использовать фигурные скобки, даже если у вас есть только одна строка кода в блоке:
#include <iostream>
using namespace std;
int main()
    {
    int N,count=0;
    int max=0;
    cin>>N;
    int a[N];
    for(int i=1;i<=N;i++)
        {
        cin>>a[i];
        }
    for(int i=1;i<=N;i++)
        {
        for(int j=1;j<=N;j++)
            {
            if(a[i]==a[j])
                {
                count++;
                }
            }
        if(count>max)
            {
            max=count;
            }
        count=0;
        }
    cout<<N-max;
    return 0;
    }
Затем, когда вы изменяете код, это намного легче сделать правильно.

Ваш код на самом деле не работает, потому что вы считаете один и тот же элемент несколько раз:
Вы считаете первые три как один, затем вы добавляете второй и третий, затем вы двигаетесь дальше в массиве и снова считаете вторые три, затем третий, затем вы двигаетесь дальше в массиве и снова считаете третьи три.

Способ, которым я бы это сделал, прост: отсортируйте массив до того, как вы его проверите, тогда бит "найти количество дубликатов" тривиален - все они находятся рядом друг с другом:
3 1 5 3 3 2 --> 1 2 3 3 3 5
Простой цикл с одним проходом через отсортированные данные даст вам максимальное количество дубликатов.


Stefan_Lang

Столько усилий и никакого ответа за два дня? Давайте хотя бы дадим вам 5! ;-)