BlogJava 联系 聚合 管理  

Blog Stats

News

 

蓝冰飞寒个人独立博客地址,www.uphenan.com

随笔档案

文章档案


蓝冰飞寒

用心去做每一件事情

最近在想一个N元一次不定方程解法的C#实现, 觉得传统的递归耗时太多, 当然, 还有其他很多的方法实现, 但在我, 都不是很容易理解

刚刚尝试了一个比较巧妙的方法, 先给出不定方程的一个特解, 然后在这个特解上通过加或减来实现每个解的重新赋值

在以下给出的代码中, iSeed用来控制随机数的随机产生域, 而且内嵌越深, 最后不定方程的解的分布越均匀

这个程序其实就是求不定方程的正整数解, 也相当于正整数的拆分

/*
*以下是代码, 这里N取10
*不定方程为: X0+X1+X2+X3+X4+X5+X6+X7+X8+X9=100, (Xn为正整数)
*程序中给出了一个特解, 大家想想就会明白为什么取这一组特解
*
*/

using System;
public class CalcPuzzle
{
        public static void Main()
        {
                int[] result=new int[]{1,1,1,1,1,1,1,1,1,91};
                int[] rdnGen=new int[9];
                Random rdn=new Random();
                Random rdnIndex=new Random();

                int iSeed=rdnIndex.Next(90);
                Console.WriteLine("The iSeed is: {0}",iSeed);
                for(int i=0;i<9;i++)
                {
                        rdnGen[i]=rdn.Next(iSeed);
                        Console.WriteLine(rdnGen[i]);
                }

                for(int i=0;i<9;i++)
                {
                        int index=result[9]-rdnGen[i];
                        if(index<2)
                        {
                                break;
                        }
                        else
                        {
                                result[9]-=rdnGen[i];
                                result[i]+=rdnGen[i];
                        }
                }

                Console.WriteLine("The result is: ");
                for(int i=0;i<10;i++)
                {
                        Console.WriteLine(result[i]);
                }
        }
}
Tags -
posted on 2009-05-04 18:56 蓝冰飞寒 阅读(183) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: