答案没有问题,但是超时了,以下是超时代码
#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与否没有关系,但是在遇到第一个不正确字符后直接跳出比一直运行到最后肯定是要好的
解决代码超时问题
本文对比了一段出现超时问题的代码与优化后的代码,详细分析了如何通过改变输入方式来提高程序效率,并讨论了使用字符串处理的优势。
697

被折叠的 条评论
为什么被折叠?



