我使用以下代码在https://www.codechef.com/problems/FLOW009
解决问题#include <stdio.h>
int main(int argc, char const *argv[])
{
int T;
float quantity, price, tex;
scanf("%d", &T);
while(T--)
{
scanf("%f %f", &quantity, &price);
tex = quantity * price;
if (quantity > 1000)
tex = tex - (tex * 0.1);
printf("%.6f\n", tex);
}
return 0;
}
我不知道为什么这一直给我错误的答案。
我尝试更改数据类型。
int main(int argc, char const *argv[])
{
int T, quantity, price;
float tex;
scanf("%d", &T);
while(T--)
{
scanf("%d %d", &quantity, &price);
tex = quantity * price;
if (quantity > 1000)
tex -= (tex * 0.1);
printf("%.6f\n", tex);
}
return 0;
}
但这也给出了错误的答案。
答案 0 :(得分:4)
在问题中,声明包括数量和价格在内的所有输入都是整数。您已将它们声明为浮动,这可以更改您的数量大于1000的输入的一些答案,如下所示:
1
1001 8
7207.200195 (your ans, correct = 7207.200000)
由于浮点值。修改后的代码如下所示
#include <stdio.h>
int main(int argc, char const *argv[])
{
int test, qty, price;
double total;
scanf("%d", &test);
while(test--)
{
scanf("%d %d", &qty, &price);
total = qty * price;
if (qty > 1000)
total -= ((total * 10.0)/100.0);
printf("%.6lf\n", total);
}
return 0;
}
答案 1 :(得分:1)
您不必在每个输入集后提供输出。这就是你的答案被拒绝的原因。将输出存储在一个数组中,最后打印出来。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{
int T, quantity, price, i;
double *tex = NULL;
scanf("%d", &T);
tex = (double *)malloc(sizeof(double) * T);
for(i=0; i<T; i++)
{
scanf("%d %d", &quantity, &price);
tex[i] = (float)(quantity * price);
if (quantity > 1000)
tex[i] -= (tex[i] * 0.1);
}
for(i=0; i<T; i++)
printf("%.6lf\n", tex[i]);
return 0;
}
答案 2 :(得分:0)
iomanip 头文件中有一个名为 setprecision() 的函数,它允许您设置要获得结果的小数位数。打印最后一位需要你写这样的语句 -
cout<<fixed<<setprecision(6)<<total<<endl;