| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1709 人关注过本帖
标题:计算100以内所有符合勾股定理的整数集
只看楼主 加入收藏
zwffff
Rank: 4
等 级:业余侠客
威 望:1
帖 子:58
专家分:224
注 册:2007-11-13
收藏
 问题点数:0 回复次数:1 
计算100以内所有符合勾股定理的整数集
大家都知道勾股定理的公式了,即a *a+b*b=c*c

我们用程序怎么来计算100以内所有符合勾股定理的整数集呢?

我们先来看一下怎么分析这个问题:
1. 首先a、b、c三个数不能相等,并且c>a,c>b,这是很显而易见的。至于a和b的大小关系,我们暂且不知。
2. 假设a=b,我们则得到a*a+a*a=c*c,即2a*a=c*c,推出c=a*sqrt(2),这与a、b、c为整数矛盾,因此a!=b,所以我们可以假设a<b<c。
3. 我们可以固定a和b的值,求得a*a+b*b的值,并利用sqrt开根,求得c的值,再判断得到的c的值是否为正整数,如果为正整数,则符合条件,找到一组数集。
4. 固定a的值,递增b的值重复执行步骤3,直到b大于100后,递增a的值,使b的值归位,重复执行步骤3,直到a的值大于100后,跳出并结束查找。

static void Main()
        {
            var list = GetPythagoreanList(100);
            if (list == null)
            {
                Console.WriteLine("list is null");
                return;
            }
 
            foreach (var item in list.Where(item => item.Length >= 3))
            {
                Console.WriteLine("firstSide:{0},secondSide:{1},thirdSide:{2}", item[0], item[1], item[2]);
            }
            Console.WriteLine("Total is {0}", list.Count());
        }
 
        static IEnumerable<int[]> GetPythagoreanList(Int32 maxNumber)
        {
            var list = new List<Int32[]>();
            // 默认第一个数<第二个数<第三个数
            var firstSideMax = maxNumber - 2;
            var secondSideMax = maxNumber - 1;
            for (var i = 1; i < firstSideMax; i++)
            {
                for (var j = i + 1; j < secondSideMax; j++)
                {
                    // 两个数的平方和
                    var squareTotal = i * i + j * j;
                    // 两个数的平方和的平方根(即为第三个数)
                    var squareRoot = Math.Sqrt(squareTotal);
                    // 第三个数是否大于最大的数
                    if (squareRoot > maxNumber) continue;
                    // 第三个数是否为整数
                    if (!IsInt(squareRoot.ToString())) continue;
                    list.Add(new[] { i, j, Convert.ToInt32(squareRoot) });
                }
            }
            return list;
        }
 
        /// <summary>
        /// 判断是否为整数
        /// </summary>
        /// <param name="number"></param>
        /// <returns></returns>
        static Boolean IsInt(String number)
        {
            return Regex.IsMatch(number, @"\d") && !number.Contains(".");
        }

详细请见“.Net港湾”相关帖子
搜索更多相关主题的帖子: 矛盾 正整数 关系 计算 
2012-05-17 00:34
bin530517984
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-2-19
收藏
得分:0 
大哥你这貌似不是c#的代码
2013-03-07 01:40
快速回复:计算100以内所有符合勾股定理的整数集
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018461 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved