实验内容
编写一个程序,将数字从键盘读入int[ ]类型的数组中。你可以假设数组中最多有50个元素。你的程序最多允许输入50个数字。输出为一个两列的列表。第一列列出了不同的数组元素;第二列是每个元素的出现次数。这个列表应该按照第一列元素从大到小的顺序排序。
对于数组
-12 3 -12 4 1 1 -12 1 -1 1 2 3 4 2 3 -12
输出应该如下所示:
N Count
4 2
3 3
2 2
1 4
-1 1
-12 4
实验主要步骤
问题分解
根据实验内容,我们可以将面临的问题进行分解:
1、定义数组并输入数据
2、将数组元素降序排序
3、统计每个元素个数并进行输出
程序源码
这里对代码进行解释一下:
前两步都很简单,输入元素到数组然后进行冒泡排序就完成了。在第三步,我们需要用到一个数组用来存放数据重复的次数,先初始化都为1,然后将遍历数组,将元素与它下一个元素进行比较判断是否相等,相等的话就在该次数上面加1,最后一个终止重复的元素对应的次数是元素真实的重复次数。所以我们在输出的时候,也要加上条件,当该元素与下一个元素不重复的时候进行输出该与该元素及重复次数。
#include<iostream>
using namespace std;
int main()
{
// 1、定义数组并输入数据
int data[50],count[50];
int n; // 限制输入元素个数
cout << "你想输入几个元素呢?" << endl;
cin >> n;
cout << "请输入数组元素:" << endl;
for (int i = 0; i < n; i++)
cin >> data[i];
// 2、将数组元素降序排序
for (int i = 0; i < n; i++)
{ //冒泡排序
for(int j=0;j<n-i;j++)
if (data[j] < data[j + 1])
{
int temp = data[j];
data[j] = data[j + 1];
data[j + 1] = temp;
}
}
// 3、统计每个元素个数并进行输出
for (int i = 0; i < n; i++)
count[i] = 1; // 把已有的数据次数初始化为1
cout << "N Count" << endl;
for (int i = 0; i < n; i++)
{
if (data[i] == data[i + 1])
count[i + 1] += count[i];
if (data[i] != data[i + 1])
cout << data[i] << " " << count[i]<<endl;
}
}
运行结果
实验小结
实验整体难度不大,在将问题分解后,依次解决就可以了,第三步需要耐心的分析一下。