Crashing Balloon

英文一直是障碍,所以题意没看懂,网上百度的题意

/*题意:地面上有100个气球 编号为1~100 两个人踩气球 初始分数都是1
      踩到相应编号的气球则分数乘以相应编号
      最后两个人报出自己的分数 分数高的取胜
      但是可能存在有人说谎的情况 分数低的人可以质疑分数高的人
      如果分数高的人有一个分数不是自己踩气球得到的
      则质疑是对的 分数低的选手是赢家
      例如 分数高的选手要得到他说出的分数必须要踩到分数低的选手一定会踩到的气球
      则质疑成功
      另外 如果两个人分数都计算错误的话 则质疑被否决
*/

   #include<iostream>
   using namespace std;

      bool nt,mt;

      void dfs(int n,int m,int p)
      {
          if(n == 1 && m == 1)
          {
              nt=true;
              return ;
          }
          if(m == 1)
            {
                mt=true;
            }
          while(p>1)
          {
              if(n % p == 0)
              {
                   dfs(n/p,m,p-1);
              }
              if(m % p == 0)
                {
                    dfs(n,m/p,p-1);
                }
                --p;
          }
          return ;
      }
      int main ()
      {
          int n,m;
          while(cin>>n>>m)
          {
              if(n<m)
              swap(n,m);
              nt=false;
              mt=false;
              dfs(n,m,100);
              //cout<<nt<<' '<<mt<<endl;
              if(!nt&&mt)  //当分数少的人没说谎,分数高的人说谎
                cout<<m<<endl;
              else //没说谎则分数高的赢,说谎了,两个人都是错的则高的,说谎了,分数高没说谎,分数低说谎了则输出高分
                cout<<n<<endl;
          }
          return 0;
      }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值