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;
    }

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

  • 相关阅读:
    VS2010下配置CxImage
    Visual Studio 2010 开发配置
    主机屋使用感受
    Web开发者必备的20款超赞jQuery插件
    自动页面居中
    jQuery+CSS打造的网页背景颜色切换效果
    小按钮,大学问
    【网站开发必备】——12款响应式 Lightbox(灯箱)效果插件
    修正 IE 的双倍页边距 bug
    a>b?a:b
  • 原文地址:https://www.cnblogs.com/idealing/p/3747855.html
Copyright © 2011-2022 走看看