Border_Su @ 2023-08-24 01:13:17
排查了半天也发现不了问题。 遂下载了#2的测试内容。
本地输入——>这不答案完全一样吗Kora
如下:
in:1000 7
out:500.5 500.5
蒟蒻直接心态炸裂,怀疑是自己尝试逆天操作的锅。遂复制自己的输出值与out的值,用如下代码判断是不是输出字符错误:
if("500.5 500.5"=="500.5 500.5")
{
cout<<"YES";
}
也输出了YES!
总之问题如上,先贴自己剑走偏锋的逆天代码(基于字符的小数点处理) 全代码如下:
#include <iostream>
using namespace std;
int main()
{
int n, k;
int Asum = 0, Bsum = 0;
double average_a;
double average_b;
cin>>n>>k;
for(int i = k; i<=n; i+=k)
{
Asum += i;
}
Bsum = (1+n)*n/2 - Asum;
if (Asum==0)
{average_a=0;}
else average_a = int(1.0*Asum/(n/k)*10)*1.0/10;
//cout<<average_a;
if (Bsum==0)
{average_b=0;}
else average_b = int(1.0*Bsum/(n-(n/k))*10)*1.0/10;
//cout<<average_a<<" "<<average_b<<endl;
char a1, a2, b1, b2;
if (average_a==int(average_a))
{a1 = '.';a2 = '0';}
else{a1 = '\0';a2 = '\0';}
if (average_b==int(average_b))
{b1 = '.';b2 = '0';}
else{b1 = '\0';b2 = '\0';}
cout<<average_a<<a1<<a2;
cout<<" ";
cout<<average_b<<b1<<b2;
/*if("500.5 500.5"=="500.5 500.5")
{
cout<<"YES";
}*/
}
其实知道可以
scanf("%.1f", x);
但是估计是大半夜神志不清,硬是要用cout去写,最终导致了这个令人绝望的产物。
不过写都写了,还是想知道到底哪里出问题了
实在无奈,还请大佬指点迷津。
by iBaeJuhyun @ 2023-08-24 07:02:23
char a1, a2, b1, b2;
if (average_a==int(average_a))
{a1 = '.';a2 = '0';}
else{a1 = '\0';a2 = '\0';}
if (average_b==int(average_b))
{b1 = '.';b2 = '0';}
else{b1 = '\0';b2 = '\0';}
cout<<average_a<<a1<<a2;
cout<<" ";
cout<<average_b<<b1<<b2;
改为
if (average_a==int(average_a))
cout<<average_a<<".0 ";
else cout<<average_a<<" ";
if (average_b==int(average_b))
cout<<average_b<<".0 ";
else cout<<average_b<<" ";
直接输出就好,"\0"会输出一些奇怪的东西,可以去洛谷ide调; 而且没有四舍五入,
average_a = int(1.0*Asum/(n/k)*10)*1.0/10;
else average_b = int(1.0*Bsum/(n-(n/k))*10)*1.0/10;
这里开个万能头然后用int改成round就行了
by Border_Su @ 2023-08-24 15:04:00
@HanSohee
成功了!
感谢大佬!!
没想到是四舍五入和“\0”的问题。感谢大佬的指教,不然我还要我查半天的字符是不是有问题。
( 」゚Д゚)」<太感谢了