Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使此循环指定给向量的一半而不是整个向量?_C++_Loops - Fatal编程技术网

C++ 如何使此循环指定给向量的一半而不是整个向量?

C++ 如何使此循环指定给向量的一半而不是整个向量?,c++,loops,C++,Loops,对于我的班级,我正在制作一个管理酒店的程序。我的“测试”方法创建随机房间和随机客户。一旦它这样做了,它就会把它创建的随机客户带到它创建的随机房间中 我的目标是测试只有一半有客人的房间入住。让另一半的房间空着。而且,我每个房间只能有一个顾客 该方法可以编译,但存在一些缺陷: “测试”让所有房间都挤满了顾客(而不是只有一半的顾客) “测试”通常会将一个房间分配给多个客户(例如,301房间现在将属于3个不同的客户,而不仅仅是1个) 有谁能帮我弄清楚如何只填充创建的一半房间吗。 还可以帮助我弄清楚如何不

对于我的班级,我正在制作一个管理酒店的程序。我的“测试”方法创建随机房间和随机客户。一旦它这样做了,它就会把它创建的随机客户带到它创建的随机房间中

我的目标是测试只有一半有客人的房间入住。让另一半的房间空着。而且,我每个房间只能有一个顾客

该方法可以编译,但存在一些缺陷:

  • “测试”让所有房间都挤满了顾客(而不是只有一半的顾客)
  • “测试”通常会将一个房间分配给多个客户(例如,301房间现在将属于3个不同的客户,而不仅仅是1个)
  • 有谁能帮我弄清楚如何只填充创建的一半房间吗。 还可以帮助我弄清楚如何不让一个房间适用于超过一个客户?我非常确定方法中的最后一个FOR循环应该是我唯一需要调整的东西

    string Hotel::test(int numroom,int numCustomers)
    {
    字符串结果;
    
    对于循环中的(int i=0;i,结束条件应为循环中的
    i,结束条件应为
    iPart 1
    您需要填满一半的房间。由于任何房间只能容纳1名客人,因此您需要将房间填满
    numRooms
    次。因此,您只需将循环调整为:

    for (int i = 0; i < numRooms/2; i++)
    
    for(int i=0;i
    第二部分 有很多方法可以确保这一点。最简单的方法是在循环中重试

    for (int i = 0; i < numRooms/2; i++)
    {
        int assignedRoom;
        do
        {
            assignedRoom = listofrooms.getRandID();
        } while (isFull(assignedRoom);
        checkIn(assignedRoom, listofcustomers.getRandID());
    }
    
    for(int i=0;i
    当然,你不希望同一个顾客住在两个房间里,所以你也需要对顾客做同样的事情

    另一种方法是随机选取一个房间,如果房间满了,则迭代到下一个房间(如果溢出,则环绕到第一个房间),直到找到一个空房间

    另一种方法是对房间的副本进行随机洗牌,然后取上半部分

    就像我说的,无论你对房间做什么,你也需要对顾客做什么

    建议:也许使用最后一种方法(使用
    随机\u shuffle
    的方法)可以实现最佳分布。请注意,这种简单的方法具有不确定性(可能很差)的性能。

    第1部分 您需要填满一半的房间。由于任何房间只能容纳1名客人,因此您需要将房间填满
    numRooms
    次。因此,您只需将循环调整为:

    for (int i = 0; i < numRooms/2; i++)
    
    for(int i=0;i
    第二部分 有很多方法可以确保这一点。最简单的方法是在循环中重试

    for (int i = 0; i < numRooms/2; i++)
    {
        int assignedRoom;
        do
        {
            assignedRoom = listofrooms.getRandID();
        } while (isFull(assignedRoom);
        checkIn(assignedRoom, listofcustomers.getRandID());
    }
    
    for(int i=0;i
    当然,你不希望同一个顾客住在两个房间里,所以你也需要对顾客做同样的事情

    另一种方法是随机选取一个房间,如果房间满了,则迭代到下一个房间(如果溢出,则环绕到第一个房间),直到找到一个空房间

    另一种方法是对房间的副本进行随机洗牌,然后取上半部分

    就像我说的,无论你对房间做什么,你也需要对顾客做什么


    建议:也许使用最后一种方法(使用
    随机\u shuffle
    的方法)可以实现最佳分布。请注意,简单的方法具有不确定性(可能是不好的)性能。

    什么类型是
    listofrooms
    listofcustomers
    ?我创建了两个类,listofrooms和listofcustomers。listofrooms(小写)是listofrooms类型,listofcustomers(小写)是listofcustomers类型。除非我们能看到这些类型的定义,以及
    checkIn()
    ,我不认为这个问题是可以具体回答的。@ildjarn,事实上这是很容易理解的。他在问如何做到这一点,所以你可以清楚地告诉他如何以最好的方式实现类型和签入
    。@Shahbaz:它也被标记为
    家庭作业
    ——我倾向于尽可能少地演示,并提供帮助修复现有代码。但是,当然,当您看不到现有代码时,很难做到这一点。什么类型是
    ListofRoom
    listofcustomers
    ?我创建了两个类,ListofRoom和listofcustomers。ListofRoom(小写)的类型是ListofRoom和listofcustomers(小写)属于ListOfCustomers类型。除非我们可以看到这些类型的定义以及
    checkIn()
    ,我不认为这个问题是可以具体回答的。@ildjarn,事实上这是很容易理解的。他在问如何做到这一点,所以你可以清楚地告诉他如何以最好的方式实现类型和签入
    。@Shahbaz:它也被标记为
    家庭作业
    ——我倾向于尽可能少地演示,并提供帮助修复现有的代码。但是,当然,当你看不到现有的代码时,这很难做到。似乎这是一次偶然的双击:D(我每半年杀死一只鼠标,这一只也结束了。)@Shahbaz,过去是,耶:)但是现在的工作太多了。好吧,闲聊够了,让我们希望迈克能做他的家庭作业吧!好像是一次偶然的双击:D(我每半年杀一只老鼠,这只也结束了…@Shahbaz,过去是的:)但是现在的工作太多了。好吧,闲聊够了,让我们希望迈克能做他的家庭作业吧!