開兩個陣列,一個紀錄數字,一個紀錄該數字出現次數。
每當有新的輸入時,就找一次當前紀錄陣列,如果已被記錄過就出現次數加一,沒有則放到最後面。
最後,從數字最大的開始輸出,輸出後把該數出現次數歸零,且把紀錄最大值的變數重設數質(不設零是因為有小於零的數)
程式碼:
#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;
}
沒有留言:
張貼留言