有关C语言For循环跳出的问题!
看这两个程序:求满足A*B=N,使A+B最小,且A,B(A<=B)为正整数的A的值。输入正整数N输出满足条件的A第一个#include<stdio.h>#include<...
看这两个程序:
求满足A*B=N,使A+B最小,且A,B(A<=B)为正整数的A的值。
输入正整数N
输出满足条件的A
第一个
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int n,x,y,a,b;
scanf("%d",&n);
x=sqrt(n);
y=sqrt(n);
for(a=x; a>=0; a--)
{
for(b=y; b<=n; b++)
{
if(n==a*b&&n%a==0&&n%b==0&&a+b>=2*x)
break;
}
if(n==a*b&&n%a==0&&n%b==0&&a+b>=2*x)
break;
}
printf("%d\n",a);
return 0;
}
第二个
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int n,x,y,a,b;
scanf("%d",&n);
x=sqrt(n);
y=sqrt(n);
for(a=x; a>=0; a--)
{
for(b=y; b<=n; b++)
{
if(n==a*b&&n%a==0&&n%b==0&&a+b>=2*x)
printf("%d\n",a);
}
}
return 0;
}
为什么第一个对,第二个错误呢?他们有什么区别 展开
求满足A*B=N,使A+B最小,且A,B(A<=B)为正整数的A的值。
输入正整数N
输出满足条件的A
第一个
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int n,x,y,a,b;
scanf("%d",&n);
x=sqrt(n);
y=sqrt(n);
for(a=x; a>=0; a--)
{
for(b=y; b<=n; b++)
{
if(n==a*b&&n%a==0&&n%b==0&&a+b>=2*x)
break;
}
if(n==a*b&&n%a==0&&n%b==0&&a+b>=2*x)
break;
}
printf("%d\n",a);
return 0;
}
第二个
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int n,x,y,a,b;
scanf("%d",&n);
x=sqrt(n);
y=sqrt(n);
for(a=x; a>=0; a--)
{
for(b=y; b<=n; b++)
{
if(n==a*b&&n%a==0&&n%b==0&&a+b>=2*x)
printf("%d\n",a);
}
}
return 0;
}
为什么第一个对,第二个错误呢?他们有什么区别 展开
1个回答
展开全部
简单说来,一个break只能跳出一层循环,你第一个方法,连续break两次,条件都一样,可以从两层循环里跳出来。
第二个跳出一层循环后,还在外层循环内,所以继续循环,还会打印其他的结果,另外你输出的地方也不一样。
第二个跳出一层循环后,还在外层循环内,所以继续循环,还会打印其他的结果,另外你输出的地方也不一样。
更多追问追答
追问
第二个不可以让他直接在内层循环输出吗?
追答
按照题目要求,最终应该只会输出1个值,你在内存循环输出,会输出多个结果的。
你非要在内层循环输出你就在if里写:
if(n==a*b&&n%a==0&&n%b==0&&a+b>=2*x)
{
printf("%d\n",a);
return 0;
}
通过return直接退出程序。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询