首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算数组中元素的频率

计算数组中元素的频率
EN

Stack Overflow用户
提问于 2016-07-23 15:49:05
回答 2查看 1.9K关注 0票数 0

您好,我目前被困在一个家庭作业问题上,因为我不知道如何处理这个问题。

编写一个将整数列表读入基类型为int的数组的程序。根据用户的选择,提供从键盘或从文件读取该数组的功能。如果用户选择文件输入,程序应该请求一个文件名。您可以假设数组中的条目少于50个。你的程序决定了有多少条目。输出将是一个两列的列表。第一列是不同数组元素的列表;第二列是每个元素出现的次数的计数。该列表应按第一列中的条目从大到小进行排序。

所以我输入: 1,2,1,10,15,12,2,10,10程序应该输出类似于:

列表频率

1-2

2-2

10-3

15-1

我能够对数字进行排序,但不知道如何比较数组中的数字。

代码语言:javascript
复制
#include <iostream>//Input/Output Library
#include <cstdlib>
#include <iomanip>
using namespace std;//Namespace of the System Libraries

//Global Constants
const int MAX = 10;

//Function Prototypes
void input(int array[], int size);
void sort(int array[],int size);

int main(int argc, char** argv){
    //Declare Variable
    int array[MAX];
    int size = MAX;

    //Input Data
    input(array, size);
    sort(array, size);

    cout<<"\nSort   Frequency\n";
    for(int i = 0; i<size; i++){
        cout<<array[i]<<endl;
    }

    return 0;
}

void input(int a[], int size){
    cout<<"Enter "<<size<<" numbers for the array: \n";
    for(int i=0; i<size; i++){
        cin>>a[i];
    }
}
void sort(int a[],int n){
    for(int i=0;i<n-1;i++){
        for(int j=i+1;j<n;j++){
            if(a[i]>a[j]){
                a[i]=a[i]^a[j];
                a[j]=a[i]^a[j];
                a[i]=a[i]^a[j];
            }
        }
    }
}
EN

回答 2

Stack Overflow用户

发布于 2016-07-23 17:45:55

除了@stryku的答案,因为你只想打印频率,你甚至不需要创建v向量:

代码语言:javascript
复制
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
#include <map>

int main() {

    std::map<int, size_t> counts;

    std::for_each(std::istream_iterator<int>(std::cin), std::istream_iterator<int>(), [&counts](int k) {
        ++counts[k];
    });

    for(const auto &pair : counts)
        std::cout<<pair.first <<" "<< pair.second<<"\n";

    return 0;
}
票数 2
EN

Stack Overflow用户

发布于 2016-07-23 16:11:26

这是你的(:

代码语言:javascript
复制
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
#include <map>

int main() {
    std::vector<int> v;
    std::map<int, size_t> counts;

    std::copy(std::istream_iterator<int>(std::cin),
              std::istream_iterator<int>(),
              std::back_inserter(v));

    for(const auto &number : v)
        ++counts[number];

    for(const auto &pair : counts)
        std::cout<<pair.first <<" "<< pair.second<<"\n";

    return 0;
}

我想如果你能向你的老师解释一下,他会很惊讶的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38539472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档