7-1 2018final世界杯也疯狂之球队积分计算(20 分)

版权声明:wywwzjj https://blog.csdn.net/weixin_42348709/article/details/81043928

这是一个世界杯赛场,有球队类,其中,队名、记录每场比分的数组、累计积分 是其三个私有数据成员;有两个成员函数,分别是根据各场比分计算累计积分、以及计算净胜球总和。请添加适当的构造函数。 积分计算规则是:胜者得三分,负者不得分,打平双方各得一分。

输入格式:

输入仅一行,表示这个球队信息,分别是 1或2(1表示该队是主队,2表示该队是客队)、若干场比分(主队进球数:客队进球数,场数小于20)。每项信息间以空格隔开。

输出格式:

输出一行,分别是该队的累计积分和净胜球数,两项信息间以空格隔开。

输入样例:

在这里给出一组输入。例如:

1 3:5 5:0 2:2 3:7

输出样例:

在这里给出相应的输出。例如:

4 -1


本题是我们的期末考试题,唯一的难点是输入数据的提取。

错误示例:
int main() 
{
	int ty;cin>>ty;int score = 0,win = 0;
    int x,y;string s;
    getline(cin,s);
    int num = s.size()/4;
	switch (ty)
	{
		case 1:
		{
			for(int i=1;i<s.size();i += 4)
			{
				x = s[i] - '0';
				y = s[i+2] - '0';
				if(x>y){score+=3;win++;}
				if(x==y){score++;}
				if(x<y){win--;}
			}
			cout<<score<<" "<<win;
			break;
		}
		case 2:
		{
			for(int i=1;i<s.size();i += 4)
			{
				x = s[i] - '0';
				y = s[i+2] - '0';
				if(y>x){score+=3;win++;}
				if(x==y){score++;}
				if(y<x){win--;}
			}
			cout<<score<<" "<<win;
			break;
		}
	}
	
	return 0;
}
错因:误以为按回车结束输入,然而题目的意思是持续(文件)输入,读到停止标志才结束。


正确示例:
#include <iostream>
#include <string>
using namespace std;

int main()
{
	int ty;cin>>ty;
	int score = 0,win = 0;
	char x,y,b;
    while(cin>>x>>b>>y)//用while(scanf("%d:%d",&x,&y)!=EOF)可能更妥当一点
    {
    	//cout<<"x="<<x<<" b="<<b<<" y="<<y<<endl;
        if(ty==1)
        {
            if(x>y){score+=3;win++;}
            else if(x==y){score++;}
            else if(x<y){win--;}
        }
        if(ty==2)
        {
            if(y>x){score+=3;win++;}
            else if(x==y){score++;}
            else if(y<x){win--;}
        }
        //cout<<score<<" "<<win<<endl;
    }
    cout<<score<<" "<<win;

	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_42348709/article/details/81043928