zoukankan      html  css  js  c++  java
  • poj1323-Game Prediction(贪心思想)

    贪心的思想:尽量的从最大值找起。然后在剩余之中,再从最大值找起。
    一,题意:
      M个人,每人N张牌,每轮比较谁出的牌大,最大者为胜。现在给定M和N,以及你的牌,要求输出你至少能确保获得几轮的胜利
      从"至少能赢几轮"可以看出:每个人必定都从最大的牌开始出。(只判定输赢两种情况即可)
    二,思路:
      1,输入并从小到大排序;
      2,循环并记录赢的次数;
      3,输出;
    三,步骤:
      1,sort函数排序
      2,先最大的牌比较,再从剩余的牌中,找最大的牌比较,依次循环下去,直到手中牌出完。
        循环开始:i = n-1(手中最大的牌)循环条件win+lose != n(牌未出完)循环处理 i--(每次循环完手中的牌跳到前一张);
        if 手中最大的牌值等于牌中最大的牌值时,必赢win++ ; max--;
        else 必输lose++ ; max -= 2;
       注意:赢了,牌中最大牌值减一,输了减二。
      3,输出。

     1 #include<iostream>
     2 #include<algorithm>
     3 using namespace std;
     4 int main(){
     5     int m , n , Case = 0 ;
     6     int a[1005];
     7     while(cin>>m>>n,m||n){
     8         Case++;
     9         for(int i = 0 ; i < n ; i++){
    10             cin>>a[i];
    11         }
    12         sort(a,a+n);      //从小到大排序 
    13         int win = 0 , lose = 0 ;
    14         int max = n*m ;   //存储牌中最大的牌 
    15         for(int i = n - 1 ; win+lose != n ; i-- ){ //win+lose==n 表示手上的牌已经出完 
    16             if(max==a[i]){
    17                 win++;    //牌中最大的牌==手上最大的牌时,必赢一次 
    18                 max--;       //赢了,牌中最大的牌值只要减一即可 
    19             } 
    20             else{         //否则,必输一次。 
    21                 lose++;   //记录输的次数 
    22                 max-=2;   //输了,牌中最大的牌值减二
    23             } 
    24         }
    25         cout<<"Case "<<Case<<": "<<win<<endl;
    26     }
    27     return 0;
    28 }
    View Code

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    springBoot启动异常 Failed to load ApplicationContext
    mysql存储过程
    springBoot集成Swagger
    groupmems命令:更改和查看组成员 和 usermod命令修改组
    javaBean简介
    Angular获取dom元素,以及父子组建之间相互传值
    Lambda表达式
    坐标转换
    扩展方法
    Binding的Path(路径)
  • 原文地址:https://www.cnblogs.com/My-Sunshine/p/4888909.html
Copyright © 2011-2022 走看看