|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 信仰、反悔 于 2012-4-23 08:47 编辑
代码是这样的,编译是没错啦,可是运行就出错了,实在找不出哪里有问题了啦 啦啦啦啦 -各位显现神通吧----------
/*
题目:已知 两个数的 最小公倍数 240 ,最大公约数 24 ,这两个数可能是多少?
*/
#include<stdio.h>
#include<stdlib.h>
int main (void)
{
int m,n; // 要求的两个数
int i; // 余数,求最大公约数 要 用到
int m_,n_; // 副本
for(m = 24; m<=240; m++)
{for(n =24; n<=240; n++) //把 m 和 n 限定在 24 和 240 之间。
{
//把 m、n 限定在 公倍数和公约数 之中
if(m > n && 240%m==0 && 240%n==0 && m%24==0 && n%24==0)
{
i = m % n ; // 能整除 最大公约数就是 n
if (i == 0 && n==24 && m*n/n == 240) // 判断 两个数 符合要求不
printf("%d,%d\n",m,n);
else // 不能整除 就要计算了
{
m_ = m , n_ = n; // m、n要参与运算,所以做个拷贝
do
{m = n;
n = i;
i = m % n;}
while(i != 0); // i 如果不为零,就一直求余 求到零
if (n==24 && m_*n_/n==240)
printf("%d,%d\n",m_,n_);
}
}
}
}
system("pause");
return 0;
}
第一个错误就是 i=0时,当作除数参与了 % 运算。
第二个错误修改i=0后,会出现无限循环,是由于mn参与了局部循环而影响了开始的for循环,改为mn的副本参与。
但是根据二楼的指导 , 通过 最大公约数和最小公倍数 能简单的求出结果。也就是说我的算法走了弯路,尽管弯路也是路~
总结:数学知识浅薄,对数学关系认识不够;
多变量时,应用有些混乱,顾此失彼。
修改后如下:
/*
题目:已知 两个数的 最小公倍数 240 ,最大公约数 24 ,这两个数可能是多少?
*/
#include<stdio.h>
#include<stdlib.h>
int main (void)
{
int m,n; // 要求的两个数
for(m = 24; m<=240; m++)
{for(n =24; n < m; n++) //把 m 和 n 限定在 24 和 240 之间,并且n<m
{
if( 240%m==0 && 240%n==0 && m%24==0 && n%24==0)
{
if(m*n==24*240)
printf("%d,%d\n",m,n);
}
}
}
system("pause");
return 0;
}
|
|