请注意测试样例第一行“3”后的空格!
查看原帖
请注意测试样例第一行“3”后的空格!
214447
EstablishedYet楼主2024/9/29 18:04

这道题一定要注意测试样例的第一行是“1 5 3 ”,也就是说3的最后是有空格的! 我原本的代码是:

#include <iostream>
#include<algorithm>
using namespace std;
int main()
{
    int a,b,c;
    cin>>a>>b>>c;
    char no;
    no=cin.get();//本来没发现“3”后面有空格,所以只用一次cin.get()消耗掉回车
    int min1,max1;
    min1=min({a,b,c});
    max1=max({a,b,c});
    int re=a+b+c-min1-max1;
    int A,B,C;
    char get;
    for(int i=0;i<3;i++)
    {
        get=cin.get();
        if(get=='A')
            A=min1;
        else if(get=='B')
            A=re;
        else
            A=max1;
        if(i<=1)
            cout<<A<<" ";
        else
            cout<<A;
    }
    return 0;
}

但这样会全部WA,因为第一行的“3”和第二行的“A”中间其实有两个字符:一个空格一个回车。而上述代码只消耗掉一个字符。而且注意运行上述代码时,如果用复制样例并粘贴的方式输入会得到正确答案,因为粘贴过程中没有输入回车键,此时“3”和“A”间只有一个字符;但如果用手敲的方式输入,也就是先输“1 5 3 ”,再输回车键,再输“ABC”的话,此时“3”和“A”间有两个字符,会得到错误答案。 而显然本题在判定的时候采取的输入方式是类似于手敲的的,因而需要将程序改为:

#include <iostream>
#include<algorithm>
using namespace std;
int main()
{
    int a,b,c;
    cin>>a>>b>>c;
    char no,no1;
    no=cin.get();
    no1=cin.get();//用两次cin.get()分别消耗掉空格和回车
    int min1,max1;
    min1=min({a,b,c});
    max1=max({a,b,c});
    int re=a+b+c-min1-max1;
    int A,B,C;
    char get;
    for(int i=0;i<3;i++)
    {
        get=cin.get();
        if(get=='A')
            A=min1;
        else if(get=='B')
            A=re;
        else
            A=max1;
        if(i<=1)
            cout<<A<<" ";
        else
            cout<<A;
    }
    return 0;
}

此时再上传会AC。 这个代码或许不是最优解,但或许能解决一些觉得自己是对的却完全WA的朋友的困惑。

2024/9/29 18:04
加载中...