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;
}
甲赢了3次,乙赢了2次,也就是甲要喝两杯,乙要喝3杯,我们发现和答案也对不上。
我们注意看题目条件:
也就是两人都赢了,谁也不喝,因此加条件:
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++;
}
说明是正确的,这个时候我们反着输出就可以了:
二刷
#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;
}