c++I/O流及排序问题

用二进制从in.dat文件中读取20个int类型数据,找出其中仅出现一次的数据,按从大到小的顺序排列,显示排序结果。

 

参考GPT和自己的思路:

好的,我来为你解答这个问题。

首先,我们可以使用ifstream类和read()函数从in.dat文件中读取20个int类型数据,代码如下:

#include <fstream>

using namespace std;

int main()
{
    int data[20];
    ifstream in("in.dat", ios::binary);
    in.read(reinterpret_cast<char*>(data), sizeof(data));
    in.close();
    
    // 接下来,我们需要统计每个数字出现的次数
    int count[100] = {0};
    for (int i = 0; i < 20; i++)
    {
        count[data[i]]++;
    }
    
    // 再次遍历数组,找出仅出现一次的数字
    int unique_nums[20], unique_count = 0;
    for (int i = 0; i < 20; i++)
    {
        if (count[data[i]] == 1)
        {
            unique_nums[unique_count++] = data[i];
        }
    }
    
    // 对仅出现一次的数字进行从大到小排序
    for (int i = 0; i < unique_count; i++)
    {
        for (int j = i + 1; j < unique_count; j++)
        {
            if (unique_nums[i] < unique_nums[j])
            {
                int temp = unique_nums[i];
                unique_nums[i] = unique_nums[j];
                unique_nums[j] = temp;
            }
        }
    }
    
    // 最后,输出排序结果
    for (int i = 0; i < unique_count; i++)
    {
        cout << unique_nums[i] << " ";
    }
    cout << endl;
    
    return 0;
}

其中,count数组用于统计每个数字出现的次数,unique_nums数组用于存储仅出现一次的数字,unique_count记录这些数字的个数。

我们可以使用冒泡排序对unique_nums数组进行从大到小排序。最后,输出排序结果即可。

希望我的回答能够对你有所帮助。如果你还有其他问题,欢迎随时咨询我。