N元一次不定方程解法的C#实现

来源:互联网 发布:决战天下进阶数据 编辑:程序博客网 时间:2024/04/29 14:16
最近在想一个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]);
                }

        }

}

 
原创粉丝点击