你好,我目前停留在作業問題上,因爲我不知道如何解決問題。計算數組中元素的頻率
將一個整數列表讀入一個基類型爲 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];
}
}
}
}
我會用一個'的std ::地圖<整型,無符號>',而不是數組。對於每個輸入,將相應映射條目的計數增加。完成輸入後,用'crbegin'枚舉map到'crend'迭代器並轉儲結果。它實際上大約有14行代碼,包括'#include'列表,以及用於可讀性的空格。而且,在沒有人的情況下,在現實世界中使用交換來執行這樣一項微不足道的任務。 – WhozCraig
你知道數字的可能範圍嗎?因爲如果(例如)0到1000之間的數字有一個簡單的答案:只需使用https://en.wikipedia.org/wiki/Counting_sort並替換把數字打印出來。但是,如果它可以是任何可以存儲的數字,那麼它就更難了:您需要使用地圖 - 但地圖實際上不是數組,因此它可能不被允許。 –