EstablishedYet @ 2024-09-29 18:04:37
这道题一定要注意测试样例的第一行是“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的朋友的困惑。
by majinhong @ 2024-10-05 17:40:54
找了一下午错,帮大忙了QAQ
by d18669991101 @ 2024-11-16 17:45:21
或者可以用C++的
cout<<A<<" "
后面省略