您好,我目前被困在一个家庭作业问题上,因为我不知道如何处理这个问题。
编写一个将整数列表读入基类型为int的数组的程序。根据用户的选择,提供从键盘或从文件读取该数组的功能。如果用户选择文件输入,程序应该请求一个文件名。您可以假设数组中的条目少于50个。你的程序决定了有多少条目。输出将是一个两列的列表。第一列是不同数组元素的列表;第二列是每个元素出现的次数的计数。该列表应按第一列中的条目从大到小进行排序。
所以我输入: 1,2,1,10,15,12,2,10,10程序应该输出类似于:
列表频率
1-2
2-2
10-3
15-1
我能够对数字进行排序,但不知道如何比较数组中的数字。
#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];
}
}
}
}发布于 2016-07-23 17:45:55
除了@stryku的答案,因为你只想打印频率,你甚至不需要创建v向量:
#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;
}发布于 2016-07-23 16:11:26
这是你的(:
#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;
}我想如果你能向你的老师解释一下,他会很惊讶的。
https://stackoverflow.com/questions/38539472
复制相似问题