答案没有问题,但是超时了,以下是超时代码
#include<iostream>
#include<string>
#include<cstring>
#include<iomanip>
#include<cstdio>
using
namespace
std;
int
main()
{
char
c;
int
sum,cont;
bool
check;
cout<<fixed<<showpoint<<setprecision(2);
while
(
true
)
{
cont=sum=0;
check=
true
;
while
(
scanf
(
"%c"
,&c)&&c!=
'\n'
)
{
if
(c==
' '
)
continue
;
switch
(c)
{
case
'A'
:sum+=4;cont++;
break
;
case
'B'
:sum+=3;cont++;
break
;
case
'C'
:sum+=2;cont++;
break
;
case
'D'
:sum+=1;cont++;
break
;
case
'F'
:cont++;
break
;
default
:
if
(check==
true
){
check=
false
;
cout<<
"Unknown letter grade in input"
<<endl;}
break
;
}
}
if
(check)
cout<<
static_cast
<
double
>(sum)/
static_cast
<
double
>(cont)<<endl;
}
return
0;
}
更改后的AC代码:
#include<iostream>
#include<string>
#include<cstring>
#include<iomanip>
#include<cstdio>
using namespace std;
int main()
{
string str;
int sum,cont;
bool check;
cout<<fixed<<showpoint<<setprecision(2);
while(getline(cin,str))
{
cont=sum=0;
check=true;
int length=str.length();
for(int i=0;i<length;i++)
{
if(str[i]==' ')
continue;
switch (str[i])
{
case 'A':sum+=4;cont++;break;
case 'B':sum+=3;cont++;break;
case 'C':sum+=2;cont++;break;
case 'D':sum+=1;cont++;break;
case 'F':cont++;break;
default:
check=false;
cout<<"Unknown letter grade in input"<<endl;
goto exit;
}
}
exit:
if(check)
cout<<static_cast<double>(sum)/static_cast<double>(cont)<<endl;
}
return 0;
}
修改主要有两处,最主要的一处是把数据读入变成了直接读入一整行而不是挨个读取,不知道是读取方式有问题还是两种读取方法的效率差异就这么大......第二处修改对于AC与否没有关系,但是在遇到第一个不正确字符后直接跳出比一直运行到最后肯定是要好的