主题:[讨论]此程序哪里出错了,求指教!
dlfhcg
[专家分:30] 发布于 2010-09-26 17:53:00
#include<stdio.h>
#define MAX 200
void main()
{
int i,j,k=0,n=0;
for(i=1; i<=MAX; i++)
for(j=1; j<i; j++)
{
if(k>=j) break;
for(k=i; k>=j; k--)
{
if(i*i == j*j + k*k)
{
printf("%4d",i);
n++;
break;
}
}
}
if(n)
printf("%d",n);
else
printf("N\n");
}
输出200以内的所有完全平方数C ( c的平方 = a的平方 + b的平方)及个数?
问题:是不是break用错了??
回复列表 (共6个回复)
沙发
tld5yj [专家分:1310] 发布于 2010-09-26 22:44:00
单说这两句似乎就有冲突了:
if(k>=j) break;
for(k=i; k>=j; k--)
{
}
如果 k>=j 那么就退出外层循环了,那么你下面的这个以 k>=j 为条件的循环就永远不可能执行到了,你先把这个问题解决了吧,然后再看看有没有更高效的循环方法。
板凳
dlfhcg [专家分:30] 发布于 2010-09-26 23:55:00
“如果 k>=j 那么就退出外层循环了,那么你下面的这个以 k>=j 为条件的循环就永远不可能执行到了” 但在两个k>=j之间k是重新赋值的啊,不是吗?怎么会有矛盾呢?
3 楼
haierok2003 [专家分:460] 发布于 2010-09-27 16:51:00
去掉if(k>=j) break;
这句话就可以了;
其实二楼的兄弟说的没错,你仔细看一下程序
for(i=1; i<=MAX; i++)
for(j=1; j<i; j++)
{
if(k>=j) break;
for(k=i; k>=j; k--) /*这个循环执行完K的值=j-1;再就跑到if(k>=j),无论怎样后面的语句都执行不到了 */
{
if(i*i == j*j + k*k)
{
printf("%4d",i);
n++;
break;
}
}
}
4 楼
haierok2003 [专家分:460] 发布于 2010-09-27 16:53:00
说说为什么加 if(k>=j) break;?
5 楼
dlfhcg [专家分:30] 发布于 2010-09-27 18:25:00
不加的话输出的完全平方数是有重复的,不是吗?
6 楼
haierok2003 [专家分:460] 发布于 2010-09-27 21:47:00
那就给i加个标记
#include<stdio.h>
#define MAX 200
void main()
{
int i,j,k=0,n=0;
int flag=1;
for(i=1; i<=MAX; i++)
{
for(j=1; j<i; j++)
{
// if(k>=j) break;
for(k=i; k>=j; k--)
{
if((i*i == j*j + k*k) && flag)
{
printf("%4d\n",i);
n++;
flag=0;
break;
}
}
}
flag=1;
}
if(n)
printf("%d",n);
else
printf("N\n");
}
我来回复