首页 > 解决方案 > 在不使用另一个数组或更改给定数组的元素的情况下计算数组中所有元素的频率

问题描述

你好,所以这个问题的问题是你不应该使用另一个数组或函数,不要更改给定数组的元素或对它们进行排序,我们不知道元素的间隔和旁注我不应该显示数字两次

例如,如果我们有 a[10]={1,2,1,3,1,5,2,4,3,1} 它应该打印出:

1 --- 4

2 --- 2

3 --- 2

4 --- 1

5 --- 1

我编写了一个使用两个 for 循环查找重复数字的代码,但我不知道如何阻止它重复相同的答案以及如何让它显示计数器

这是代码:

#include<iostream>
using namespace std;

int main()
{
    int arr[5];
    int size = sizeof(arr) / sizeof(arr[0]);
    for (int i = 0; i < 5; i++)
    {
        cout << "Enter " << i << " number:";
        cin >> arr[i];
    }
    {
        for (int i = 0; i < size; i++)
            for (int j = i + 1; j < size; j++)
                if (arr[i] == arr[j])
                    cout << " Repeating elements are " << arr[i] << " " << endl;
    }
    return 0;
}

标签: c++arraysloopsfor-loopwhile-loop

解决方案


请参阅下面的代码。

为简洁起见,我将数组设为常量。您只需复制粘贴从用户输入中读取的代码即可。

诀窍是检查每i一个这是第一次a[i]找到的。如果之前已经找到,那么它已经计入上一次迭代,现在可以跳过。

#include <iostream>
using namespace std;

int main()
{
    const int a[]={1,2,1,3,1,5,2,4,3,1};
    const int size = sizeof(a) / sizeof(a[0]);

    for (int i = 0; i < size; i++)
    {
        bool duplicate = false;
        for (int j = 0; j < i; j++)
        {
            if (a[i] == a[j])
            {
                duplicate = true;
                break;
            }
        }
        if (duplicate)
        {
            continue;
        }
        int count = 1;
        for (int j = i + 1; j < size; j++)
        {
            if (a[i] == a[j])
            {
                count++;
            }
        }
        cout << a[i] << " -- " << count << '\n';
    }
}

推荐阅读