PTA网站里的一道题目,描述如下,唯一的难点就是不确定个数的输入数据,想不出好的办法
下面贴的代码是不对的
有一个用字符串读入然后进行处理的想法和另外一个通过设置计时器限制输入时长来限制输出的想法
但是实践困难,求解
#include
int jj(int k){
int s;
if (k>1000000) s=(k-1000000)/100+39500;
else if (k<=1000000&&k>600000) s=(k-600000)/100015+33500;
else if (k<=600000&&k>400000) s=(k-400000)/1003+27500;
else if (k<=400000&&k>200000) s=(k-200000)/1005+17500;
else if (k<=200000&&k>100000) s=(k-100000)/100075+10000;
else s=k/10;
return(s);
}
int main(){
int n,m;
do {
scanf("%d",&n);
printf("%d",jj(n));
} while(getchar()=='\n');
return 0;
}
这段代码有问题,应该是先使用浮点数计算出s,然后再取整,这段代码的误差太大了
if (k>1000000) s=(k-1000000)/100+39500;
else if (k<=1000000&&k>600000) s=(k-600000)/100015+33500;
else if (k<=600000&&k>400000) s=(k-400000)/1003+27500;
else if (k<=400000&&k>200000) s=(k-200000)/1005+17500;
else if (k<=200000&&k>100000) s=(k-100000)/100075+10000;
else s=k/10;
改为:
double jj(int k){
double s;
if (k>1000000) s=(k-1000000)/100.0+39500;
else if (k<=1000000&&k>600000) s=(k-600000)/100015.0+33500;
else if (k<=600000&&k>400000) s=(k-400000)/1003.0+27500;
else if (k<=400000&&k>200000) s=(k-200000)/1005.0+17500;
else if (k<=200000&&k>100000) s=(k-100000)/100075.0+10000;
else s=k/10.0;
return(s);
}
输入数据就使用一个
while(scanf("%d",&n) != EOF)应该就行