PTA |1046 划拳 分数 15 水题

336 阅读1分钟

PTA | 程序设计类实验辅助教学平台 (pintia.cn)

思想

先比较出甲乙各赢了多少次,甲赢了多少次就代表乙输了多少次,乙要喝多少杯。

//谁划出来的数字刚好是喊出来的数字之和,那么谁就赢了


我们可以先求出甲乙各赢了多少次
#include<bits/stdc++.h>
using namespace std;
const int N=110;
struct Point
{
    int han;
    int hua;
}a[N],b[N];

int main()
{
    int n=0;cin>>n;
    for(int i=0;i<n;++i)
    {
        cin>>a[i].han>>a[i].hua>>b[i].han>>b[i].hua;
    }

    int cnta=0,cntb=0;
    //开始比较
    for(int i=0;i<n;++i)
    {
        if(a[i].hua==(a[i].han+b[i].han))
        {
            cnta++;
        }
      if(b[i].hua==a[i].han+b[i].han)
        {
            cntb++;
        }
    }
    cout<<cnta<<" "<<cntb<<endl;
    return 0;
}

image.png

甲赢了3次,乙赢了2次,也就是甲要喝两杯,乙要喝3杯,我们发现和答案也对不上。

我们注意看题目条件:

image.png

也就是两人都赢了,谁也不喝,因此加条件:

     if(a[i].hua==(a[i].han+b[i].han)&&b[i].hua!=a[i].han+b[i].han)
        {
            cnta++;
        }
        if(b[i].hua==a[i].han+b[i].han&&a[i].hua!=(a[i].han+b[i].han))
        {
            cntb++;
        }

image.png

说明是正确的,这个时候我们反着输出就可以了:

image.png image.png

二刷

#include<iostream>
using namespace std;
int main()
{
    int n=0;cin>>n;
    int jiawin=0,yiwin=0,jialose=0,yilose=0;
    int a,b,c,d;
    for(int i=0;i<n;i++)
    {
        cin>>a>>b>>c>>d;

        //甲赢的情况
        if(b==a+c&&d!=a+c)
        {
            jiawin++;
            yilose++;
        }
        else if(d==a+c&&b!=a+c)
        {
            yiwin++;
            jialose++;
        }
    }
    cout<<jialose<<" "<<yilose;
    return 0;
}