主题:第二界编程比赛试题
黄金风格
[专家分:4050] 发布于 2005-10-20 13:06:00
输入两个整数(要求100以内的自然数),若这两个整数之间存在自然数对,则将其中所有的自然数对输出,否则输出不存在的提示.所谓的自然数对是指两个自然数的和与差都是平方数.例如:17-8=9,17+8=25,那么17与8就是自然数对!
例如:输入:2 11
输出: 4 5
6 10
请大家按要求做题,一定要严密,贴上最优的代码!
由于本的能力有限,我想采取大家投票的方式取下届冠军.
请大家投自己最中意的程序编者!!
回复列表 (共72个回复)
71 楼
az0745 [专家分:1300] 发布于 2005-10-21 12:53:00
#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 楼
linhuifj [专家分:40] 发布于 2005-10-21 14:11:00
/*输入两个整数(要求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;
}
我来回复