zoukankan      html  css  js  c++  java
  • 打牌

    一群人想打斗地主和升级。已知他们已经1个、2个、3个或者4个人成为一桌了,现在要把他们全部变成3人一桌或者4人一桌,问至少移动几个人?(要保证所有人都能进行游戏) 输入格式: 多组数据,每组数据一行,包含4个整数a,b,c,d 0<=a,b,c,d<=100000000表示1个人、两个人、3个人、4个人的桌数。 输出格式: 至少移动的人数,如果不可能完成,输出-1

    #include<stdio.h>
    int getMinCount(int* m)
    {
        int sum = m[0]*1+m[1]*2+m[2]*3+m[3]*4;
        int ms = 0;
        //首先判断参加游戏的人数是否可以分成每桌3人或者4人
        //简单的思想是每桌先3人,然后将多余的分到每桌
        //如果剩余的人数多余桌数,则说明参加游戏的人数不满足要求
        //也可以简单的写成sum > 5这样的判断
        if(sum % 3 > sum / 3)
            ms = -1;
        //如果1人桌的个数大于2人桌,则先将2人桌凑成3人桌,
        //然后将多余的1人桌合并成3人桌(比4人桌要少移动)
        if(m[0] >= m[1])
        {
            ms = m[1] + (m[0]-m[1])/3 * 2 + (m[0]-m[1])%3;
         }
        else
        {
            //如果2人桌的个数小于1人桌和4人桌,
            //则可以移动1人桌,拆4人桌的1人与2人桌合并
            //这样最多移动m[1]个
            if(m[1] <= m[0] + m[2])
                ms = m[1];
            //如果2人桌多于1人桌和4人桌,则先将1人桌合并到2人桌,
            //然后拆分4人桌,合并到2人桌,然后将多余的2人桌拆分,
            else
                ms = (m[1] - m[0] - m[2]) * 2 / 3 + m[0] + m[2] + ((m[1] - m[0] - m[2]) * 2) / 3 ;
        }
        return ms;
    }
    
    int main(){
        int a[] = {3,300,3,4};
        int ms = getMinCount(a);
        printf("minCount is %d",ms);
        return 0;
    }

    不知自己的思路对不对,考虑的周不周全

  • 相关阅读:
    【Css】SCSS基本语法
    【Css】Scss 与 Sass 简单示例
    【移动端】cordova在app中打开外部链接——cordova-plugin-inappbrowser
    border-radius圆角边框属性讲解
    css 设置 transform 无效
    linux下设置php执行命令
    linux下php命令无法使用如何解决
    微信小程序 --- 表单输入验证(手机号、邮箱验证、输入非空)
    微信小程序倒计时组件开发
    小程序--三级联动
  • 原文地址:https://www.cnblogs.com/idealing/p/3747855.html
Copyright © 2011-2022 走看看