读书人

杭电acm1407求查错解决思路

发布时间: 2012-07-29 15:26:14 作者: rapoo

杭电acm1407求查错
请大牛帮忙看看,我的代码错在哪里了。不胜感激!
#include<stdio.h>
#include<math.h>
#define MAX 10000
int main()
{
int num,i,j,k,x,y,z,tmp;
int flag[MAX+1]={0};
for(i=1;i<=100;++i)
flag[i*i]=1;
while((scanf("%d",&num))!=EOF)
{
tmp=(int)sqrt((double)(num/3));
for(k=tmp;k*k<num;++k)
for(i=1;i*i<=num/3;++i)
{
j=num-i*i-k*k;
if(flag[j] && j>=i*i && j<=k*k)
{
x=i; y=(int)(sqrt(j)); z=k;
goto F1;
}
}
F1:printf("%d %d %d\n",x,y,z);
}
return 0;
}


[解决办法]
编译能通过吗?编译错误先粘上来
[解决办法]
有这么一种情况
你的输入:83
你的输出:3 5 7

而输出要求:对于每组测试数据,请按照x,y,z递增的顺序输出它的一个最小正整数解

如果1 1 9 比起 3 5 7算是更小的一组解的话,就表明算法有问题哈
[解决办法]
用穷举法搞定

C/C++ code
#include <stdio.h>void printijk(int i, int j, int k){    printf("%d %d %d\n", i, j, k);}int main(){    int num;    int i, j, k;    int flag;    while((scanf("%d", &num)) != EOF)    {        flag = 0;        for (i = 1; i <= 100; i++)        {            for (j = 1; j <= 100; j++)            {                for (k = 1; k <= 100; k++)                {                    if (num == i*i+j*j+k*k)                    {                        printijk(i, j, k);                        flag = 1;                        break;                    }                }                if (flag == 1)                    break;            }            if (flag == 1)                break;        }            }    return 0;} 

读书人网 >C语言

热点推荐