早教吧作业答案频道 -->其他-->
acm2143WAhttp://acm.hdu.edu.cn/showproblem.php?pid=2143#includeintmain(){int64a,b,c,temp;while(scanf("%I64d%I64d%I64d",&a,&b,&c)==3){if(a>b){temp=a;a=b;b=temp;}if(b>c){temp=b;b=c;c=temp;}
题目详情
acm 2143 WA http://acm.hdu.edu.cn/showproblem.php?pid=2143
#include
int main()
{
__int64 a,b,c,temp;
while(scanf("%I64d%I64d%I64d",&a,&b,&c)==3)
{
if(a>b)
{ temp=a;a=b;b=temp; }
if(b>c)
{ temp=b;b=c;c=temp; }
if(a>b)
{ temp=a;a=b;b=temp; }
if(a+b==c||a*b==c||a==0)
printf("oh,lucky!\n");
else if(c%b==a) // c/a==b||c/b==a可省?
printf("oh,lucky!\n");
else
printf("what a pity!\n");
}
return 0;
}
#include
int main()
{
__int64 a,b,c,temp;
while(scanf("%I64d%I64d%I64d",&a,&b,&c)==3)
{
if(a>b)
{ temp=a;a=b;b=temp; }
if(b>c)
{ temp=b;b=c;c=temp; }
if(a>b)
{ temp=a;a=b;b=temp; }
if(a+b==c||a*b==c||a==0)
printf("oh,lucky!\n");
else if(c%b==a) // c/a==b||c/b==a可省?
printf("oh,lucky!\n");
else
printf("what a pity!\n");
}
return 0;
}
▼优质解答
答案和解析
此题你自己精简了大量的逻辑抽象,因为人力思考的太多,所以容易出错,为方便阅读我把你的判断条件分成了三种.
还有虽然你使用了64位计算,但是乘法的范围还是超过了64位,除非 用 unsigned long long,所以我改用除判断.
另外你可以参考我给的java 代码中的判断逻辑(感谢杭电的ACMer 的code),这两套都亲测accept
顺便发个牢骚,杭电题虽然多,但是some test case 不给力..
#include
// 4294967295 4294967294 4294967293 在此组数据时,你的代码会乘法越界
// 2147483646 2 4294967292 this case for test
int main()
{
__int64 a,b,c,temp;
while(scanf("%I64d%I64d%I64d",&a,&b,&c)==3)
{
if(a>b)
{ temp=a;a=b;b=temp; }
if(b>c)
{ temp=b;b=c;c=temp; }
if(a>b)
{ temp=a;a=b;b=temp; }
if(a+b==c )
printf("oh,lucky!\n");
else if( a!=0 && c/a==b && c%a == 0) //a等于0的情况只有三者都为0,在加法中已有判断
printf("oh,lucky!\n");
else if( b!=0 && c%b==a || c>b && a==b ) // c>b && a==b 则 a%c == b
printf("oh,lucky!\n");
else
printf("what a pity!\n");
}
return 0;
}
import java.util.Scanner;
public class Main
{
public static void main(String _[])
{
Scanner s=new Scanner(System.in);
while(s.hasNext()){
boolean b=false;
int a[]={s.nextInt(),s.nextInt(),s.nextInt()};
a: for(int i=0;i
还有虽然你使用了64位计算,但是乘法的范围还是超过了64位,除非 用 unsigned long long,所以我改用除判断.
另外你可以参考我给的java 代码中的判断逻辑(感谢杭电的ACMer 的code),这两套都亲测accept
顺便发个牢骚,杭电题虽然多,但是some test case 不给力..
#include
// 4294967295 4294967294 4294967293 在此组数据时,你的代码会乘法越界
// 2147483646 2 4294967292 this case for test
int main()
{
__int64 a,b,c,temp;
while(scanf("%I64d%I64d%I64d",&a,&b,&c)==3)
{
if(a>b)
{ temp=a;a=b;b=temp; }
if(b>c)
{ temp=b;b=c;c=temp; }
if(a>b)
{ temp=a;a=b;b=temp; }
if(a+b==c )
printf("oh,lucky!\n");
else if( a!=0 && c/a==b && c%a == 0) //a等于0的情况只有三者都为0,在加法中已有判断
printf("oh,lucky!\n");
else if( b!=0 && c%b==a || c>b && a==b ) // c>b && a==b 则 a%c == b
printf("oh,lucky!\n");
else
printf("what a pity!\n");
}
return 0;
}
import java.util.Scanner;
public class Main
{
public static void main(String _[])
{
Scanner s=new Scanner(System.in);
while(s.hasNext()){
boolean b=false;
int a[]={s.nextInt(),s.nextInt(),s.nextInt()};
a: for(int i=0;i
看了 acm2143WAhttp:...的网友还看了以下:
已知a,x属于R,集合A={2,4,xˆ2-5x+9},B={3,x^2+ax+a} (1)若A= 2020-04-05 …
设集合A=﹛a,a+1,-3 ﹜,B=﹛a-3,2a-1,a²+1﹜,且A∩B= ﹛-3﹜ ,则a 2020-05-15 …
定义集合A*B={x|x∈A且x不属于B},若A={1,3,5,7},B={2,3,5},则: ( 2020-05-15 …
设集合A={1,a,b},B={a,a^2,ab}且A=B,求实数A,B的值因为集合需要满足互异性 2020-05-15 …
若集合A={x|1≤x≤3},B={y|y=x²+2x+a,x∈R}(1)若A∪B=B,求a的取值 2020-05-15 …
已知:二次函数y=x^-(m-3)x-3m的图像与x轴交与A,B两点,A在原点左侧,B在原点右侧, 2020-06-04 …
a^3+b^3+c^3-3abc=0=(a+b)^3+c^3-3a^2b-3ab^2-3abc,我 2020-07-31 …
帮忙做几道因式分解1.(x+y+z)^3-x^3-y^3-z^32.a^2+2b^2+3c^2+3a 2020-11-01 …
近世代数2、设A,B是U的子集,规定A+B=(A-B)(B-A).证明:(1)A+B=B+A(2)A 2020-11-28 …
有理数b满足︱b︱<3,并且有理数a使得a<b恒成立,则a得取值范围是[]A.小于或等于3的有理数B 2021-02-04 …