首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

杭电acm1407求查错解决思路

2012-07-29 
杭电acm1407求查错请大牛帮忙看看,我的代码错在哪里了。不胜感激!#includestdio.h#includemath.h#defin

杭电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;} 

热点排行
Bad Request.