狂宠粉博主 2023-12-05 17:48 采纳率: 100%
浏览 9
已结题

第2题 房间数量 (我要的是c++语言的)

第2题 房间数量 (我要的是c++语言的)
有n头奶牛,第i头奶牛的身高是h[i]。身高相同的所有奶牛都住在同一个房间。问需要多少个房间才能安排好所有奶牛的住宿。

输入格式
接下来有n行,第i行是一个正整数h[i]。

60%的数据: 1 <= n <= 1000, 1 <= h[i] <= 1000000。

80%的数据:1 <= n <= 100000, 1 <= h[i] <= 1000000。

100%的数据:1 <= n <= 100000, 1 <= h[i] <= 2000000000。

输出格式
一个整数。

输入/输出例子1
输入:

5

10 30 10 20 30

输出:

3

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-12-05 20:58
    关注

    【以下回答由 GPT 生成】

    我能够解决这个问题。下面是解决方案的步骤:

    1. 首先,我们需要对奶牛的身高进行排序,以便后面的处理。
    2. 然后,我们需要遍历排序后的奶牛身高列表,并将每一头奶牛分配到一个房间中。
    3. 如果当前房间为空,我们将当前奶牛放入该房间。
    4. 如果当前房间不为空,我们将比当前奶牛身高小的最大身高的奶牛移到下一个房间中。
    5. 重复步骤4,直到找到一个空房间。
    6. 重复步骤3到步骤5,直到将所有的奶牛都分配到房间中。
    7. 返回分配到的房间的数量。

    下面是用C++语言实现的代码示例:

    #include <iostream>
    #include <vector>
    #include <algorithm>
    
    using namespace std;
    
    int main() {
        int n;  // 奶牛数量
        cin >> n;
    
        vector<int> heights(n);  // 奶牛身高列表
        for (int i = 0; i < n; i++) {
            cin >> heights[i];
        }
    
        // 对奶牛身高进行排序
        sort(heights.begin(), heights.end());
    
        int rooms = 1;  // 需要的房间数量
        int current_room = 0;  // 当前房间编号
    
        for (int i = 1; i < n; i++) {
            if (heights[i] > heights[i-1]) {
                // 当前奶牛的身高比前一头奶牛的身高大
                // 将当前奶牛放入下一个房间
                current_room++;
            }
            // 将当前奶牛放入当前房间
            rooms = max(rooms, current_room + 1);
        }
    
        cout << rooms << endl;
    
        return 0;
    }
    

    这个程序能够根据一系列奶牛的身高安排房间,并输出需要的房间数量。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月19日
  • 已采纳回答 12月11日
  • 创建了问题 12月5日