主题:第二界编程比赛试题
黄金风格
[专家分:4050] 发布于 2005-10-20 13:06:00
输入两个整数(要求100以内的自然数),若这两个整数之间存在自然数对,则将其中所有的自然数对输出,否则输出不存在的提示.所谓的自然数对是指两个自然数的和与差都是平方数.例如:17-8=9,17+8=25,那么17与8就是自然数对!
例如:输入:2 11
输出: 4 5
6 10
请大家按要求做题,一定要严密,贴上最优的代码!
由于本的能力有限,我想采取大家投票的方式取下届冠军.
请大家投自己最中意的程序编者!!
回复列表 (共72个回复)
51 楼
iAkiak [专家分:8460] 发布于 2005-10-20 16:48:00
还是搭个oj来测吧...这样既严格又公平...
52 楼
lsylsy [专家分:400] 发布于 2005-10-20 17:36:00
我(38楼的)的程序在数据扩展方面的确很麻烦,但是符合题意,并且减少了很多不必要的计算,如果是工程中遇到这种不需扩展数据的情况,我觉得还是挺实用的。
53 楼
euc [专家分:4310] 发布于 2005-10-20 17:43:00
时间度为O(high)的,(另外)这帖也能置顶真是不可思议
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int com (int low, int high)
{
int m, n, i, j, flag = 0;
int MIN = 0, MAX = sqrt (2 * high);
for (i = MIN; i <= MAX; ++i)
for (j = i; j <= MAX; ++j) {
int p = i * i, q = j * j;
if ((p + q) % 2 || !p && !q)
continue;
if ((m = (p + q)/2) < low || m > high)
continue;
if ((n = abs (p - q)/2) < low || n > high)
continue;
if (m == n) continue;
printf ("%d %d\n", m, n);
flag = 1;
}
return flag;
}
int main (void)
{
printf ("%d\n", com (2, 11));
getch ();
return 0;
}
54 楼
bluelight [专家分:280] 发布于 2005-10-20 18:15:00
下午上班的时候偷偷在办公室里搞的:
#include "Stdio.h"
#include "Conio.h"
int GetNum(int n) /*用于获取输入数字,确保输入的是数字*/
{
int a,i=0;
char ch;
while(i<n)
{
ch=getch();
putch(ch);
if(ch>='0' && ch<='9')
{
a=a*i*10+(int)ch-'0';
i++;
continue;
}
if(ch==13 && i>=1)
break;
a=0;
i=0;
printf("\n\tError: Your input is Not Number.\n\tplease retype:\n");
}
return a;
}
IsSqre(int x) /*用于确定是否是平方数*/
{
int i,flag;
flag=0;
for(i=0;i<=100;i++)
{
if(x==i*i)
flag=1;
}
if(flag==1)
return 1;
else
return 0;
}
main()
{
int Ia,Ib,Temp,i,j; /*定义*/
printf("\nplease input the first Number:\n");
Ia=GetNum(2); /*获取第一个数*/
printf("\nplease input the second Number:\n");
Ib=GetNum(2); /*获取第二个数*/
if(Ia>Ib) /*排序*/
{
Temp=Ia;
Ia=Ib;
Ib=Temp;
}
printf("\nthe number you input is %d and %d \n",Ia,Ib);
Temp=0;
for(i=Ia;i<Ib;i++)
{ /*输出结果*/
for(j=i+1;j<=Ib;j++)
{
if(IsSqre(i+j))
if(IsSqre(j-i))
{
printf("%2d %2d\t",i,j);
Temp=1;
}
}
}
if(Temp==0)
printf("\nno result");
getch();
return 0;
}
55 楼
LO几又VE [专家分:14490] 发布于 2005-10-20 19:05:00
[url=http://upload.programfan.com/lovingyou.wmv]大家来看看站长的风采吧[/url]
来几张站长滴PP:
[img]http://storage.msn.com/x1pnp_rgmi5o51fMAAxXHPtECkjvaZ7Fvlflh-2tMJMaMIHSgx4pHBnGEybBD_JYVFwchebGAYf_LEGSRCBuOWvgKU93yEfVJMhiqydaC3pzoDSOFqrCz_bKURQLfSnkMbR[/img]
[img]http://storage.msn.com/x1pnp_rgmi5o51fMAAxXHPtEBNbE5wXaaH3mmNRq1FpWRuf-MTyZTxNMi_0zFtjwF9gwcbJd9xvfCjY4fui_sHQT9qNkN5cQAUN64rSpM84BAShKRKBgAmfbsaTY8pAjk8l[/img]
[em1][em1][em1][em1][em1]
嘎嘎 姚大哥不会怪罪小弟吧
56 楼
bluelight [专家分:280] 发布于 2005-10-20 19:17:00
短短一个下午,就有了这么多程序!!六个页面,
翻来覆去很麻烦!!希望大家节省资源!不要贴一些无关的东西!!
像cole那样的真令人讨厌!!!
57 楼
cole [专家分:960] 发布于 2005-10-20 21:27:00
#include<stdio.h>
#include<math.h>
main()
{int i,j,k,t;
k=t=0;
scanf("%d%d",&i,&j);
if((i>=0&&i<=100)&&(j>=0&&j<=100))
{k=j-i;t=j+i;
k=abs(k);
if(k==sqrt(k)^2&&t==sqrt(t)^2)
printf("%d %d\n",i,j);
}
else
printf("the error!");
}
58 楼
yimi329 [专家分:50] 发布于 2005-10-20 21:56:00
我想知道什么到时候才能结束呢。楼主啊,看着到时候了就关了吧。
再提醒某些人,不要坏大家的眼睛。不要重复发,这里是大家的地盘!
谢谢!
59 楼
lsylsy [专家分:400] 发布于 2005-10-20 22:03:00
cole:
你为什么那么讨厌??
你为什么不能给大家留一个好的印象??
这样对你有什么好??
难道你以为这样就能让更多的人看你的贴,支持你吗??
就像你这样,再好的程序也不会有人看,因为看你这个人就已经够了。
不过在这以前,我已经运行过你的代码,什么东西......
Sorry!我实在看不下去了才写了上面的话。
60 楼
Catamount3000 [专家分:7640] 发布于 2005-10-20 22:31:00
#include <stdio.h>
#include <math.h>
/* 打印 */
void Print(int *arr,int *len) {
for (;arr<len;printf("%5d",*arr++));
printf("\n");
}
/* 判断 */
int IsCom(int *tmp) {
int val_1,val_2,sv_1,sv_2;
val_1=(*(tmp+1)-*tmp),val_2=(*(tmp+1)+*tmp);
sv_1=(int)sqrt(val_1),sv_2=(int)sqrt(val_2);
return (((sv_1*sv_1)==val_1)&&((sv_2*sv_2)==val_2));
}
/* 重点过程,该函数将找出指定范围内的所有符合要求的数 */
void Fun(int *arr,int *len,int *tmp,int index) {
int *p=arr;
if (p>len) return;
index=0,*(tmp+index)=*p,index=1;
for (p++;p<=len;p++) {
*(tmp+index)=*p;
if (IsCom(tmp)) Print(tmp,tmp+index+1);
}
Fun(arr+1,len,tmp,index);
}
/* main program */
#define MAX 100
void main() {
int a[MAX],i=0,left,right,tmp[2];
for (;i<MAX;*(a+i)=i++);
printf("输入范围(i j):");
scanf("%d%d",&left,&right);
Fun(a+left,a+right,tmp,0);
getchar();getchar();
}
以上程序在vc6中通过
我来回复