zoukankan      html  css  js  c++  java
  • A+B/A*B求A和B

    Problem G 
    
    Time Limit : 1000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other)
    
    Total Submission(s) : 14   Accepted Submission(s) : 4
    
    Font: Times New Roman | Verdana | Georgia
    
     Font Size: ← →
    
    Problem Description
    
    有二个整数,它们加起来等于某个整数,乘起来又等于另一个整数,它们到底是真还是假,也就是这种整数到底存不存在,实在有点吃不准,你能快速回答吗?看来只能通过编程。
    例如:
    x + y = 9,x * y = 15 ? 找不到这样的整数x和y
    1+4=5,1*4=4,所以,加起来等于5,乘起来等于4的二个整数为1和4
    7+(-8)=-1,7*(-8)=-56,所以,加起来等于-1,乘起来等于-56的二个整数为7和-8
     
    
    Input
    
    输入数据为成对出现的整数n,m(-10000<n,m<10000),它们分别表示整数的和与积,如果两者都为0,则输入结束。
     
    
    Output
    
    只需要对于每个n和m,输出“Yes”或者“No”,明确有还是没有这种整数就行了。
     
    
    Sample Input
    
    9 15
    5 4
    1 -56
    0 0
    
     Sample Output
    
    No
    Yes
    Yes
    
    
    #include<iostream>
    #include<stdio.h>
    #include<cmath>
    using namespace std;
    int main()
    {
        int x,y,i,j;
        float x1,y1,min1,min2,max,l;
        while(scanf("%d%d",&x,&y),x||y)
        {
            l=-1;
            if(x==0)
            {
                if(y<0)
                {
                    for(i=sqrt(double(-y))-1;i<=sqrt(double(-y))+1;i++)
                        if(-i*i==y)
                            l=1;
                }
            }
            if(y==0)
                l=1;
            if(x<0&&y>0)
            {
                x=fabs(double(x));
                y=fabs(double(y));
            }
            if(x>0&&y>0)
            {
                x1=x/2.0;
                y1=sqrt(double(y));
                max=x1>=y1?x1:y1;
                min1=x1<=y1?x1:y1;
                min2=x<=y?x:y;
                for(i=max;i<=min2;i++)
                {
                    j=x-i;
                    if((j<=min1)&&(i*j==y))
                    {
                        l=1;
                        break;
                    }
                }
            }
            if(x<0&&y<0)
            {
                y1=sqrt(double(-y));
                for(i=y1;i<=-y;i++)
                {
                    j=x+i;
                    if((j<=y1)&&(i*j==-y))
                    {
                        l=1;
                        break;
                    }
                }
            }
            if(x>0&&y<0)
            {
                y1=sqrt(double(-y));
                for(i=1;i<=y1;i++)
                {
                    j=x+i;
                    if((i*j==-y)&&(j<=-y))
                    {
                        l=1;
                        break;
                    }
                }
            }
            if(l==1)
                printf("Yes\n");
            else
                printf("No\n");
        }
        return 0;
    }
    

      

  • 相关阅读:
    儿子和女儿——解释器和编译器的区别与联系
    求eclipse中的java build path 详解
    求eclipse中的java build path 详解
    System.Activator类
    htmlagilitypack解析html
    KindleEditor insertfile初始化多个
    按住ALT键复制
    隐藏行错误排查
    列类型: 202错误
    C#中的&运算
  • 原文地址:https://www.cnblogs.com/heqinghui/p/2618804.html
Copyright © 2011-2022 走看看