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

最近在想一个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]);
                }

        }

}

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值