当前位置:编程学习 > C#/ASP.NET >>

求两个自然数,其和是667,最小公倍数与最大公约数之比是120:1

这是本人在笔试中遇到的难题,希望各位高手予以指教? --------------------编程问答--------------------
        static void Main(string[] args)
        {
            for(int i=1;i<335;i+=1)
            {
                if (Mini(i,667-i) == 120 * Maxi(i,667-i))
                {
                    Console.WriteLine(i.ToString() + "," + (667 - i).ToString());                    
                }
            }            
        }

       static int Mini(int small,int big)
        {
            for(int i=big;i<small*big;i+=1)
            {
                if(i%small == 0 && i%big==0)
                {
                    return i;
                }
            }
            return small * big;
        }

        static int Maxi(int small,int big)
        {
            for (int i = small; i > 1; i -= 1)
            {
                if (small % i == 0 && big % i == 0)
                {
                    return i;
                }
            }
            return 1;
        }
      


--------------------编程问答-------------------- 1楼的应该可以 --------------------编程问答-------------------- 115 552
232 435

#include <iostream>
using namespace std;
//最大公约数
int GCD(int m,int n) { 
    int r; 

    while(n != 0) { 
        r = m % n; 
        m = n; 
        n = r; 
    } 

return m;
}
int main()
{
int i = 667;
for (i = 1; 2*i < 667; i++)
{
int m = GCD(i,667-i);
                //最大公约数*最小公倍数=两数乘积
if (120*m*m==i*(667-i))
{
  cout<<m<<endl;
cout<<i<<"\t"<<667-i<<endl;
}
}
return 0;
}

--------------------编程问答--------------------
  staticvoid Main(string[] args)
        {for(int i=1;i<335;i+=1)
            {if (Mini(i,667-i)==120* Maxi(i,667-i))
                {
                    Console.WriteLine(i.ToString()+","+ (667- i).ToString());                    
                }
            }            
        }staticint Mini(int small,int big)
        {for(int i=big;i<small*big;i+=1)
            {if(i%small==0&& i%big==0)
                {return i;
                }
            }return small* big;
        }staticint Maxi(int small,int big)
        {for (int i= small; i>1; i-=1)
            {if (small% i==0&& big% i==0)
                {return i;
                }
            }return1;
        }


这好像有点问题吧?为什么是小于337 和return1? --------------------编程问答--------------------
引用 4 楼 hart_with 的回复:
  staticvoid Main(string[] args)
        {for(int i=1;i <335;i+=1)
            {if (Mini(i,667-i)==120* Maxi(i,667-i))
                {
                    Console.WriteLine(i.ToString()+","+ (667- i).ToString());                   
                }
            }           
        }staticint Mini(int small,int big)
        {for(int i=big;i <small*big;i+=1)
            {if(i%small==0&& i%big==0)
                {return i;
                }
            }return small* big;
        }staticint Maxi(int small,int big)
        {for (int i= small; i>1; i-=1)
            {if (small% i==0&& big% i==0)
                {return i;
                }
            }return1;
        }


这好像有点问题吧?为什么是小于337 和return1?

你不觉得过了335之后的组合和前面的是重复的吗?还有,最大公约数在最小的情况下不是1 么。。。 --------------------编程问答--------------------

            int m;//2者中小数 n=667-m
            List<int> x = new List<int>();
            for (int i = 1; i < 334; i++)
            {
                int temp = 120 * (667 - i);
                if (temp % i != 0)
                {
                    continue;
                }
                else
                {
                    int div = temp / i;                    
                    int b = (int)System.Math.Sqrt(div);
                    if(b*b==div)
                        x.Add(i);                   
                }
            }
            for (int i = 0; i < x.Count; i++)
            {
                m = x[i];
                MessageBox.Show(m.ToString());
            }
--------------------编程问答--------------------

        private static void suanfa1()
        {
            int X = 0;
            int Y = 0;
            for (;X<667;X++)
                for (Y = 0; Y < 667; Y++)
                {
                    if (X + Y != 667)
                        continue ;
                    if (min(X, Y) / max(X, Y) != 120)
                        continue ;
                    Console.WriteLine(string.Format("x={0};y={1};min={2};max={3}", X, Y, min(X, Y), max(X, Y)));
                }
        }
        /// <summary>
        /// 最小公倍数
        /// </summary>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <returns></returns>
        private static int min(int x, int y)
        {
            for (int i = (x < y ? x : y); i<10000 ; i++)
            {
                if (i  % y == 0&&i%x==0)
                    return i;
            }
            return 0;
        }
        /// <summary>
        /// 最大公约数
        /// </summary>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <returns></returns>
        private static int max(int x, int y)
        {
            for (int i =x>y?x:y; i > 0; i--)
            {
                if (x % i == 0 && y % i == 0)
                    return i;
            }
            return 0;
        }
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,