题目链接:https://www.luogu.com.cn/problem/P2705
这题很简单,但是我足足WA了两次,第三次才能通过(果然小白
首先,这是最后的AC代码
#include <stdio.h>
#include <stdlib.h>
int main ( )
{
long long r, b, c, d, e; // r是红球数与红盒数,b是蓝球数与蓝盒数
//c是红球放红盒的得分,d是蓝球放蓝盒的得分
//e是红球放蓝盒或者蓝球放红盒的得分
scanf ( "%lld %lld %lld %lld %lld", &r, &b, &c, &d, &e );
if ( c + d >= 2 * e )
{
printf ( "%lld\n", r * c + b * d );
}
else
{
if ( r > b )
{
printf ( "%lld\n", b * 2 * e + ( r - b ) * c );
}
else
{
printf ( "%lld\n", r * 2 * e + ( b - r ) * d );
}
}
system ( "pause" );
return 0;
}
然后,这是我第一次提交的80分代码
#include <stdio.h>
#include <stdlib.h>
int main ( )
{
int r, b, c, d, e;
scanf ( "%d %d %d %d %d", &r, &b, &c, &d, &e );
if ( c + d >= 2 * e )
{
printf ( "%lld\n", r * c + b * d );
}
else
{
int x, y, m; //x取两种小球数的最小的一种球数,y则取另一种球数减去x的球数,m取y球的得分
if ( r > b )
{
x = b;
y = r - x;
m = c;
}
else
{
x = r;
y = b - x;
m = d;
}
printf ( "%lld\n", x * 2 * e + y * m );
}
system ( "pause" );
return 0;
}
自以为最后的分值会超过整型,直接把最后的输出改为“lld”
再然后又删删改改,有了90分代码
#include <stdio.h>
int main ( )
{
int r, b, c, d, e; // r是红球数与红盒数,b是蓝球数与蓝盒数
//c是红球放红盒的得分,d是蓝球放蓝盒的得分
//e是红球放蓝盒或者蓝球放红盒的得分
scanf ( "%d %d %d %d %d", &r, &b, &c, &d, &e );
if ( c + d >= 2 * e )
{
printf ( "%d\n", r * c + b * d );
}
else
{
if ( r > b )
{
printf ( "%d\n", b * 2 * e + ( r - b ) * c );
}
else
{
printf ( "%lld\n", r * 2 * e + ( b - r ) * d );
}
}
return 0;
}
仔细看,我还是有个“lld"没有改
于是,我推敲是输出与定义的类型不同导致结果出错。然后有了如下AC代码
#include <stdio.h>
#include <stdlib.h>
int main ( )
{
long long r, b, c, d, e; // r是红球数与红盒数,b是蓝球数与蓝盒数
//c是红球放红盒的得分,d是蓝球放蓝盒的得分
//e是红球放蓝盒或者蓝球放红盒的得分
scanf ( "%lld %lld %lld %lld %lld", &r, &b, &c, &d, &e );
if ( c + d >= 2 * e )
{
printf ( "%lld\n", r * c + b * d );
}
else
{
if ( r > b )
{
printf ( "%lld\n", b * 2 * e + ( r - b ) * c );
}
else
{
printf ( "%lld\n", r * 2 * e + ( b - r ) * d );
}
}
system ( "pause" );
return 0;
}
最后就是说,还是不能懒。
同时,一定要注意输入类型与输出类型的转化带来的影响