開兩個陣列,一個紀錄數字,一個紀錄該數字出現次數。
每當有新的輸入時,就找一次當前紀錄陣列,如果已被記錄過就出現次數加一,沒有則放到最後面。
最後,從數字最大的開始輸出,輸出後把該數出現次數歸零,且把紀錄最大值的變數重設數質(不設零是因為有小於零的數)
程式碼:
#include <iostream> using namespace std; int main() { int number[100] = { 0 }, times[100] = { 0 }; int n, flag = 0, check, maxNumber = -100000; // flag records current array's length while (cin >> n) { check = 0; // check if this number has been recorded for (int i = 0; i < flag; i++) { if (n == number[i]) { times[i]++; check = 1; break; } } if (check == 0) // if number is new { number[flag] = n; times[flag]++; flag++; } if (n > maxNumber) // find max number maxNumber = n; } cout << "N\tcount" << endl; for (int i = 0; i < flag; i++) { for (int j = 0; j < flag; j++) { if (number[j] == maxNumber) { cout << number[j] << "\t" << times[j] << endl; times[j] = 0; maxNumber = -100000; } for (int k = 0; k < flag; k++) { if (number[k] > maxNumber && times[k] != 0) maxNumber = number[k]; } } } return 0; }
另解
#include <iostream> using namespace std; int main() { int n, arr[100], len = 0, occur[100] = { 0 }; while (cin >> n) { int not_occur = 1; for (int i = 0; i < len; i++) { if (n == arr[i]) { occur[i]++; not_occur = 0; break; } } if (not_occur) { arr[len] = n; occur[len]++; len++; } } for (int i = 0; i < len; i++) { for (int j = 0; j < len; j++) { if (arr[i] > arr[j]) { swap(arr[i], arr[j]); swap(occur[i], occur[j]); } } } cout << "N\tcount" << endl; for (int i = 0; i < len; i++) { cout << arr[i] << "\t" << occur[i] << endl; } return 0; }
沒有留言:
張貼留言