In ra giá trị và số lần xuất hiện của từng phần tử trong mảng theo thứ tự xuất hiện

Viết chương trình nhập vào số nguyên n và n số nguyên không âm. In ra trên từng dòng màn hình giá trị của phần tử và số lần xuất hiện của phần tử đó trong mảng (cách nhau bởi dấu cách) theo thứ tự xuất hiện của phần tử đó

#include <iostream>
using namespace std;
 
const int MAX = 1e6;
int cnt[MAX];
 
int main(){
    int n;
    do{
        cin >> n;
    }while(n < 1);
    int a[n];
    for(int i = 0; i < n;i++){
        do{
            cin >> a[i];
        }while(a[i] < 0);
    }
    for(int i = 0;i < MAX; i++) cnt[i] = 0;
    for(int i = 0; i < n;i++){
        cnt[a[i]]++;
    }
    for(int i = 0;i < MAX; i++){
        if(cnt[i] > 0){
            cout << i <<" "<< cnt[i] << "\n";
        }
    }
}

mn ơi sửa như nào để khi nhập không sắp xếp vị trí nhỉ

trông bài làm của bạn khá tốt, vậy để in theo thứ tự nhập, thì bạn lặp theo mảng a thôi

// đoạn này thì sẽ in ra, nhưng mà theo thứ tự giá trị tăng dần
for(int i = 0;i < MAX; i++){
        if(cnt[i] > 0){
            cout << i <<" "<< cnt[i] << "\n";
        }
    }
// lặp theo mảng a, tuy nhiên, cách này sẽ bị in ra một phần tử nhiều lần
for(int i = 0; i < n;i++){
        // in ra số lần xuất hiện của a[i]
        cout << a[i] <<" "<< cnt[a[i]] << "\n";
}
// cải tiến cách trên một tí
for(int i = 0; i < n;i++){
        // in ra số lần xuất hiện của a[i], nếu chưa in
        if (cnt[a[i]] > 0) {
                cout << a[i] <<" "<< cnt[a[i]] << "\n";
                cnt[a[i]] = 0; // in rồi thì xoá để lần sau khỏi in lại
        }
        
}
4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?