回 帖 发 新 帖 刷新版面

主题:第二界编程比赛试题

输入两个整数(要求100以内的自然数),若这两个整数之间存在自然数对,则将其中所有的自然数对输出,否则输出不存在的提示.所谓的自然数对是指两个自然数的和与差都是平方数.例如:17-8=9,17+8=25,那么17与8就是自然数对!

例如:输入:2  11
     
      输出: 4  5
            6  10


请大家按要求做题,一定要严密,贴上最优的代码!
由于本的能力有限,我想采取大家投票的方式取下届冠军.
请大家投自己最中意的程序编者!!

回复列表 (共72个回复)

71 楼

#include "stdio.h"
#include "math.h"

int main(void)
{
int a,b,i,t,x,y;
scanf("%d%d",&a,&b);
if(a<b)
{ t=a; a=b; b=t;}
for(b++;b<a;b++)
  for(i=b;i<a;i++)
   {
     x=sqrt(i+b);
     y=sqrt(fabs(i-b));
     if(x*x==(i+b)&&y*y==(fabs(i-b))&&i!=b)
      printf("%6d%6d\n",b,i );
   }
}
TC2.0下编译通过。。。

72 楼

/*输入两个整数(要求100以内的自然数),若这两个整数之间存在自然数对,则将其中所有的自然数对输出,
否则输出不存在的提示.所谓的自然数对是指两个自然数的和与差都是平方数.例如:17-8=9,17+8=25,
那么17与8就是自然数对!

例如:输入:2  11
     
      输出: 4  5
            6  10
*/
#include <iostream>
#include <cmath>
using namespace std;
bool square(double x)
{
    double n=sqrt(x);
    if(x<=0)return false;//防止对上面 的题目出现 “8 8” 这样的数对
    if(n*n==x)return true;
    else return false;
}


int main()
{
    cout<<"please input two numbers, x   y:"<<endl;
    double x,y;    
    double a,b;        
    bool reinput;
    do{
        reinput=false;
        cin>>x>>y;
        a=int(x),b=int(y);
        if(x!=a||y!=b||x<0||x>100||y<0||y>100){
            cout<<"illegle numbers!  Try again:"<<endl;
            reinput=true;
        }
    }while(reinput);
    
    if(x>y){double temp=x;x=y;y=temp;}
    bool havenum=false;
    for(int i=x;i<=y;i++)
        for(int j=x;j<=y;j++)
            if(square(i-j)&&square(i+j)){cout<<i<<"  "<<j<<endl;havenum=true;}
            
            if(!havenum)cout<<"No numbers pairs!"<<endl;
            return 0;
    
}
    

我来回复

您尚未登录,请登录后再回复。点此登录或注册