主頁 > .NET開發 > 求一個多元一次方程的所有解?

求一個多元一次方程的所有解?

2020-09-26 03:12:18 .NET開發

有什么方法能高效的求出一個多元一次方程的所有解?
例如 X1+X2+......+X26=51;

的所有整數解,要求每個解的范圍在0-10之間。

uj5u.com熱心網友回復:

51個1,分成26堆。

uj5u.com熱心網友回復:

如果允許小數或著負數的話,應該無窮多的解,只允許正整數,直接用回溯法

uj5u.com熱心網友回復:

參考 3 樓 wangyx92528 的回復:
如果允許小數或著負數的話,應該無窮多的解,只允許正整數,直接用回溯法

允許整數 也就是0-10,包括0,10,。我嘗試了一下,貌似會有上億的解,計算起來很慢,所以問問大神有沒有什么好辦法。

uj5u.com熱心網友回復:

沒有辦法,這個屬于“堆壘數論”--------華羅庚老先生的研究的東西。

俺們只有回溯迭代一條,求個解很容易,要全部遍歷一到,可以啊。丟給位元幣,讓他發成挖礦任務,全挖礦機去算去

uj5u.com熱心網友回復:

單說求解可以說相當容易

10+10+10+10+10+1

先丟5個10,相當把一個跟直線,用5點分割成6份

現在就是把剩下21點,隨機拋到那個5和10的區域里去

當然其實問題就簡化成了10 這個數 被可以被劃分成多少組

最后歸還成1+1-----------------------這就是華羅庚老先生的研究范圍了

uj5u.com熱心網友回復:

這個題目沒看懂,固定X1加到X26么?那不可能是整數,從1加到10就已經55了.

uj5u.com熱心網友回復:

參考 7 樓 java__net 的回復:
這個題目沒看懂,固定X1加到X26么?那不可能是整數,從1加到10就已經55了.

不是固定的可以是10+10+10+10+1+0.....+0=51。
可以是0。

uj5u.com熱心網友回復:

參考 6 樓 wanghui0380 的回復:
單說求解可以說相當容易

10+10+10+10+10+1

先丟5個10,相當把一個跟直線,用5點分割成6份

現在就是把剩下21點,隨機拋到那個5和10的區域里去

當然其實問題就簡化成了10 這個數 被可以被劃分成多少組

最后歸還成1+1-----------------------這就是華羅庚老先生的研究范圍了

嗯 其實為了解決一個業務問題,想到的一種方法,不過貌似不可行。看看有沒有其他方法來解決。

uj5u.com熱心網友回復:

另x為0-10之間的一個數  隨機組合

uj5u.com熱心網友回復:

X1+X2+......+Xn=M
Xn的取值[0,M]的整數,

定義陣列X[n-1]存臨時X的值,

定義一個迭代函式,引數包括:
n——幾元,
M——還剩下可以用來分的整數。
函式提前回傳的條件:
M=0,此時余下的X都是0,
或n=1,此時Xn=M。

M=51,n=26應該不用多久就可以全迭代出來。

uj5u.com熱心網友回復:

求所有正整數解可以,只能用列舉,26個未知數每個未知數取值范圍(0-51)嵌套26個回圈,每個回圈回圈次數51次,總次數51的26次方,列舉結果小于這個數

uj5u.com熱心網友回復:

參考 7 樓 java__net的回復:
這個題目沒看懂,固定X1加到X26么?那不可能是整數,從1加到10就已經55了.

范圍是0~1,0可以的

uj5u.com熱心網友回復:

借樓提問:一元n次方程,(樓主的是n=26),如果事先不知道n的數值,n為變數。那么怎么寫這個回圈呢

uj5u.com熱心網友回復:

參考 12 樓 jx315425246 的回復:
求所有正整數解可以,只能用列舉,26個未知數每個未知數取值范圍(0-51)嵌套26個回圈,每個回圈回圈次數51次,總次數51的26次方,列舉結果小于這個數


借樓請問大佬:一元n次方程,(樓主的是n=26),如果事先不知道n的數值,n為變數。

意味著需要n個回圈,那么怎么寫代碼呢

uj5u.com熱心網友回復:

參考 11 樓 wid999 的回復:
X1+X2+......+Xn=M
Xn的取值[0,M]的整數,

定義陣列X[n-1]存臨時X的值,

定義一個迭代函式,引數包括:
n——幾元,
M——還剩下可以用來分的整數。
函式提前回傳的條件:
M=0,此時余下的X都是0,
或n=1,此時Xn=M。

M=51,n=26應該不用多久就可以全迭代出來。



借樓請問大佬:一元n次方程,(樓主的是n=26),如果事先不知道n的數值,n為變數。

意味著需要n個回圈,那么怎么寫代碼呢

uj5u.com熱心網友回復:

參考 15 樓 lxl126 的回復:
Quote: 參考 12 樓 jx315425246 的回復:

求所有正整數解可以,只能用列舉,26個未知數每個未知數取值范圍(0-51)嵌套26個回圈,每個回圈回圈次數51次,總次數51的26次方,列舉結果小于這個數


借樓請問大佬:一元n次方程,(樓主的是n=26),如果事先不知道n的數值,n為變數。

意味著需要n個回圈,那么怎么寫代碼呢


那就用遞回,n次遞回

uj5u.com熱心網友回復:

如果是整數的話等于是把所有的 值窮舉一下。

例如 56 個 1

然后每個值 0-10 然后多余的位數補0 .

uj5u.com熱心網友回復:

謝謝回復~~之前也想過也只有遞回的辦法了,可是這個用遞回可能難以實作吧,感覺遞回也就實作A!這種問題。


例如:
已知四元一次方程x1+2x2+3x3+5x4=6,列出所有可能的自然數解
https://ask.csdn.net/questions/766857
#!/usr/bin/python
for x1 in range(0, 7):
    for x2 in range(0, 7):
        for x3 in range(0, 7):
            for x4 in range(0, 7):
                if x1 + 2 * x2 + 3 * x3 + 5 * x4 == 6:
                    print(str(x1) + " " + str(x2) + " " + str(x3) + " " + str(x4) + " " + str(2**x1+3**x2+4**x3+5**x4));


這個用遞回就很難寫吧,懇求大神指點

uj5u.com熱心網友回復:

參考 17 樓 jx315425246 的回復:
Quote: 參考 15 樓 lxl126 的回復:

Quote: 參考 12 樓 jx315425246 的回復:

求所有正整數解可以,只能用列舉,26個未知數每個未知數取值范圍(0-51)嵌套26個回圈,每個回圈回圈次數51次,總次數51的26次方,列舉結果小于這個數


借樓請問大佬:一元n次方程,(樓主的是n=26),如果事先不知道n的數值,n為變數。

意味著需要n個回圈,那么怎么寫代碼呢


那就用遞回,n次遞回




謝謝回復~~之前也想過也只有遞回的辦法了,可是這個用遞回可能難以實作吧,感覺遞回也就實作A!這種問題。


例如:
已知四元一次方程x1+2x2+3x3+5x4=6,列出所有可能的自然數解
https://ask.csdn.net/questions/766857
#!/usr/bin/python
for x1 in range(0, 7):
    for x2 in range(0, 7):
        for x3 in range(0, 7):
            for x4 in range(0, 7):
                if x1 + 2 * x2 + 3 * x3 + 5 * x4 == 6:
                    print(str(x1) + " " + str(x2) + " " + str(x3) + " " + str(x4) + " " + str(2**x1+3**x2+4**x3+5**x4));


這個用遞回就很難寫吧,懇求大神指點

uj5u.com熱心網友回復:


        List<string> sl = new List<string>();
        /// <summary>
        /// 多元一次方程
        /// </summary>
        /// <param name="n">元數(多少個未知數)</param>
        /// <param name="y">方程式的值</param>
        /// <param name="cn">當前第幾元(未知數)取值</param>
        /// <param name="cy">當前取值后的值</param>
        /// <param name="slist">取值數列</param>
        /// <returns></returns>
        public void GetY(int n,int y,int cn,int cy,string slist)
        {
            string s;
            int i, j, k;
            s = slist;
            for(i=0;i<y;i++)
            {
                k = cy + i;
                s = s + i.ToString() + " ";
                if(k<y && cn<n)
                {
                    GetY(n, y, cn + 1, k, s);
                }
                if(cn==n && k==y)
                {
                    sl.Add(s);
                }
            }
        }

uj5u.com熱心網友回復:

參考 1 樓 wanghui0380的回復:
51個1,分成26堆。

正解,然后用閘板法,兩個板距離不超過10

uj5u.com熱心網友回復:

參考 23 樓 楠木_ 的回復:
Quote: 參考 1 樓 wanghui0380的回復:
51個1,分成26堆。

正解,然后用閘板法,兩個板距離不超過10

怎么解?,你寫一個出來

uj5u.com熱心網友回復:

參考 樓主 xrd42077的回復:
有什么方法能高效的求出一個多元一次方程的所有解?
例如 X1+X2+......+X26=51;

的所有整數解,要求每個解的范圍在0-10之間。

1?10這個要點邏輯

uj5u.com熱心網友回復:

回圈唄,這還不簡單,倒是你這題目無解啊

uj5u.com熱心網友回復:

大家討論的很好,再進一步就解決了:10+10+10+10+10+1; 這個算式很重要,之后討論的是10+10+10+10+9+2; 然后是10+10+10+10+9+1+1; 10+10+10+10+8+3; 10+10+10+10+8+2+1; ...

uj5u.com熱心網友回復:

要求出所有解的話直接搜索。

如果只用求出解的個數的話使用動態規劃。

uj5u.com熱心網友回復:

參考 20 樓 lxl126的回復:
謝謝回復~~之前也想過也只有遞回的辦法了,可是這個用遞回可能難以實作吧,感覺遞回也就實作A!這種問題。


例如:
已知四元一次方程x1+2x2+3x3+5x4=6,列出所有可能的自然數解
https://ask.csdn.net/questions/766857
#!/usr/bin/python
for x1 in range(0, 7):
    for x2 in range(0, 7):
        for x3 in range(0, 7):
            for x4 in range(0, 7):
                if x1 + 2 * x2 + 3 * x3 + 5 * x4 == 6:
                    print(str(x1) + " " + str(x2) + " " + str(x3) + " " + str(x4) + " " + str(2**x1+3**x2+4**x3+5**x4));


這個用遞回就很難寫吧,懇求大神指點

你確定你的方程有解嗎?我寫出來測驗沒解,而且x前面的系數1 2 3 5沒有規律,我也是小白,有大佬寫出來的話可以順便復制粘貼回復我一下

uj5u.com熱心網友回復:

參考 21 樓 lxl126的回復:
Quote: 參考 17 樓 jx315425246 的回復:

Quote: 參考 15 樓 lxl126 的回復:

Quote: 參考 12 樓 jx315425246 的回復:

求所有正整數解可以,只能用列舉,26個未知數每個未知數取值范圍(0-51)嵌套26個回圈,每個回圈回圈次數51次,總次數51的26次方,列舉結果小于這個數


借樓請問大佬:一元n次方程,(樓主的是n=26),如果事先不知道n的數值,n為變數。

意味著需要n個回圈,那么怎么寫代碼呢


那就用遞回,n次遞回




謝謝回復~~之前也想過也只有遞回的辦法了,可是這個用遞回可能難以實作吧,感覺遞回也就實作A!這種問題。


例如:
已知四元一次方程x1+2x2+3x3+5x4=6,列出所有可能的自然數解
https://ask.csdn.net/questions/766857
#!/usr/bin/python
for x1 in range(0, 7):
    for x2 in range(0, 7):
        for x3 in range(0, 7):
            for x4 in range(0, 7):
                if x1 + 2 * x2 + 3 * x3 + 5 * x4 == 6:
                    print(str(x1) + " " + str(x2) + " " + str(x3) + " " + str(x4) + " " + str(2**x1+3**x2+4**x3+5**x4));


這個用遞回就很難寫吧,懇求大神指點

def equation(x):
    if x==0:
        print(pow(x,1),'+2*',pow(x,2),'+3*',pow(x,3),'+5*',pow(x,4),'!=6')
        return
    elif (pow(x,1)+2*pow(x,2)+3*pow(x,3)+5*pow(x,4))==6:
        print(pow(x,1),'+2*',pow(x,2),'+3*',pow(x,3),'+5*',pow(x,4),'=6')
    else:
        print(pow(x,1),'+2*',pow(x,2),'+3*',pow(x,3),'+5*',pow(x,4),'!=6')
        equation((x-1))

i=6
equation(int(i))
"""
輸出結果:
6 +2* 36 +3* 216 +5* 1296 !=6
5 +2* 25 +3* 125 +5* 625 !=6
4 +2* 16 +3* 64 +5* 256 !=6
3 +2* 9 +3* 27 +5* 81 !=6
2 +2* 4 +3* 8 +5* 16 !=6
1 +2* 1 +3* 1 +5* 1 !=6
0 +2* 0 +3* 0 +5* 0 !=6
"""

uj5u.com熱心網友回復:

參考 8 樓 xrd42077的回復:
Quote: 參考 7 樓 java__net 的回復:

這個題目沒看懂,固定X1加到X26么?那不可能是整數,從1加到10就已經55了.

不是固定的可以是10+10+10+10+1+0.....+0=51。
可以是0。

那你這個是n元n次方程了呀

uj5u.com熱心網友回復:

先說明,這段程式是用列舉的方式求解,所以非常耗時!

    internal class Cacu
    {
        //a1X1+a2X2+......+anXn=M;
        //a1到an為各元系數

        /// <summary>
        /// 方程的解的串列
        /// </summary>
        /// <param name="iRatios">各元系數an</param>
        /// <param name="iM">總和</param>
        /// <param name="iXLower">各元的下限</param>
        /// <param name="iXUpper">各元的上限</param>
        internal System.Collections.Generic.List<int[]> CacuIt(int[] iRatios, int iM, int iXLower, int iXUpper)
        {
            System.Collections.Generic.List<int[]> lAnswers = new List<int[]>();
            if (iXLower * iRatios.Length <= iM)//有解
            {
                int[] iXs = new int[iRatios.Length];
                for (int I = 0; I < iXs.Length; I++) iXs[I] = iXLower;
                bool blNotEnd = true;
                while (blNotEnd)
                {
                    if (GetCacuState(iRatios, iXs, iM))
                    {
                        int[] iXt = new int[iRatios.Length];
                        for (int I = 0; I < iXt.Length; I++) iXt[I] = iXs[I];
                        lAnswers.Add(iXt);
                    }
                    int iIndex = 0;
                    bool blOverflow = true;
                    while (blOverflow && iIndex < iXs.Length)
                    {
                        int iT = iXs[iIndex] + 1;
                        if (iT > iXUpper)
                        {
                            iXs[iIndex] = iXLower;
                            iIndex++;
                        }
                        else
                        {
                            iXs[iIndex] = iT;
                            blOverflow = false;
                        }
                    }
                    blNotEnd = iIndex < iXs.Length;
                }
            }
            return lAnswers;
        }
        

        /// <summary>
        /// 算下是不是解
        /// </summary>
        /// <param name="iRatios">系數表</param>
        /// <param name="iXs">當前解</param>
        /// <param name="iM">和</param>
        /// <returns>計算結果</returns>
        internal bool GetCacuState(int[] iRatios, int[] iXs, int iM)
        {
            int iSum = 0;
            for (int I = 0; I < iRatios.Length; I++)
                iSum += iRatios[I] * iXs[I];

            //if (iSum == iM)
            //{
            //    for (int I = 0; I < iXs.Length; I++)
            //        Console.Write(string.Format("{0}\t", iXs[I]));
            //    Console.WriteLine();
            //}

            return iSum == iM;
        }
    }

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/129552.html

標籤:C#

上一篇:c#task

下一篇:ContentControl和DataGrid實作WPF的分頁,然后想在分頁中實作資料庫連接遇到了問題

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • WebAPI簡介

    Web體系結構: 有三個核心:資源(resource),URL(統一資源識別符號)和表示 他們的關系是這樣的:一個資源由一個URL進行標識,HTTP客戶端使用URL定位資源,表示是從資源回傳資料,媒體型別是資源回傳的資料格式。 接下來我們說下HTTP. HTTP協議的系統是一種無狀態的方式,使用請求/ ......

    uj5u.com 2020-09-09 22:07:47 more
  • asp.net core 3.1 入口:Program.cs中的Main函式

    本文分析Program.cs 中Main()函式中代碼的運行順序分析asp.net core程式的啟動,重點不是剖析原始碼,而是理清程式開始時執行的順序。到呼叫了哪些實體,哪些法方。asp.net core 3.1 的程式入口在專案Program.cs檔案里,如下。ususing System; us ......

    uj5u.com 2020-09-09 22:07:49 more
  • asp.net網站作為websocket服務端的應用該如何寫

    最近被websocket的一個問題困擾了很久,有一個需求是在web網站中搭建websocket服務。客戶端通過網頁與服務器建立連接,然后服務器根據ip給客戶端網頁發送資訊。 其實,這個需求并不難,只是剛開始對websocket的內容不太了解。上網搜索了一下,有通過asp.net core 實作的、有 ......

    uj5u.com 2020-09-09 22:08:02 more
  • ASP.NET 開源匯入匯出庫Magicodes.IE Docker中使用

    Magicodes.IE在Docker中使用 更新歷史 2019.02.13 【Nuget】版本更新到2.0.2 【匯入】修復單列匯入的Bug,單元測驗“OneColumnImporter_Test”。問題見(https://github.com/dotnetcore/Magicodes.IE/is ......

    uj5u.com 2020-09-09 22:08:05 more
  • 在webform中使用ajax

    如果你用過Asp.net webform, 說明你也算是.NET 開發的老兵了。WEBform應該是2011 2013左右,當時還用visual studio 2005、 visual studio 2008。后來基本都用的是MVC。 如果是新開發的專案,估計沒人會用webform技術。但是有些舊版 ......

    uj5u.com 2020-09-09 22:08:50 more
  • iis添加asp.net網站,訪問提示:由于擴展配置問題而無法提供您請求的

    今天在iis服務器配置asp.net網站,遇到一個問題,記錄一下: 問題:由于擴展配置問題而無法提供您請求的頁面。如果該頁面是腳本,請添加處理程式。如果應下載檔案,請添加 MIME 映射。 WindowServer2012服務器,添加角色安裝完.netframework和iis之后,運行aspx頁面 ......

    uj5u.com 2020-09-09 22:10:00 more
  • WebAPI-處理架構

    帶著問題去思考,大家好! 問題1:HTTP請求和回傳相應的HTTP回應資訊之間發生了什么? 1:首先是最底層,托管層,位于WebAPI和底層HTTP堆疊之間 2:其次是 訊息處理程式管道層,這里比如日志和快取。OWIN的參考是將訊息處理程式管道的一些功能下移到堆疊下端的OWIN中間件了。 3:控制器處理 ......

    uj5u.com 2020-09-09 22:11:13 more
  • 微信門戶開發框架-使用指導說明書

    微信門戶應用管理系統,采用基于 MVC + Bootstrap + Ajax + Enterprise Library的技術路線,界面層采用Boostrap + Metronic組合的前端框架,資料訪問層支持Oracle、SQLServer、MySQL、PostgreSQL等資料庫。框架以MVC5,... ......

    uj5u.com 2020-09-09 22:15:18 more
  • WebAPI-HTTP編程模型

    帶著問題去思考,大家好!它是什么?它包含什么?它能干什么? 訊息 HTTP編程模型的核心就是訊息抽象,表示為:HttPRequestMessage,HttpResponseMessage.用于客戶端和服務端之間交換請求和回應訊息。 HttpMethod類包含了一組靜態屬性: private stat ......

    uj5u.com 2020-09-09 22:15:23 more
  • 部署WebApi隨筆

    一、跨域 NuGet參考Microsoft.AspNet.WebApi.Cors WebApiConfig.cs中配置: // Web API 配置和服務 config.EnableCors(new EnableCorsAttribute("*", "*", "*")); 二、清除默認回傳XML格式 ......

    uj5u.com 2020-09-09 22:15:48 more
最新发布
  • C#多執行緒學習(二) 如何操縱一個執行緒

    <a href="https://www.cnblogs.com/x-zhi/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2943582/20220801082530.png" alt="" /></...

    uj5u.com 2023-04-19 09:17:20 more
  • C#多執行緒學習(二) 如何操縱一個執行緒

    C#多執行緒學習(二) 如何操縱一個執行緒 執行緒學習第一篇:C#多執行緒學習(一) 多執行緒的相關概念 下面我們就動手來創建一個執行緒,使用Thread類創建執行緒時,只需提供執行緒入口即可。(執行緒入口使程式知道該讓這個執行緒干什么事) 在C#中,執行緒入口是通過ThreadStart代理(delegate)來提供的 ......

    uj5u.com 2023-04-19 09:16:49 more
  • 記一次 .NET某醫療器械清洗系統 卡死分析

    <a href="https://www.cnblogs.com/huangxincheng/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/214741/20200614104537.png" alt="" /&g...

    uj5u.com 2023-04-18 08:39:04 more
  • 記一次 .NET某醫療器械清洗系統 卡死分析

    一:背景 1. 講故事 前段時間協助訓練營里的一位朋友分析了一個程式卡死的問題,回過頭來看這個案例比較經典,這篇稍微整理一下供后來者少踩坑吧。 二:WinDbg 分析 1. 為什么會卡死 因為是表單程式,理所當然就是看主執行緒此時正在做什么? 可以用 ~0s ; k 看一下便知。 0:000> k # ......

    uj5u.com 2023-04-18 08:33:10 more
  • SignalR, No Connection with that ID,IIS

    <a href="https://www.cnblogs.com/smartstar/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/u36196.jpg" alt="" /></a>...

    uj5u.com 2023-03-30 17:21:52 more
  • 一次對pool的誤用導致的.net頻繁gc的診斷分析

    <a href="https://www.cnblogs.com/dotnet-diagnostic/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/3115652/20230225090434.png" alt=""...

    uj5u.com 2023-03-28 10:15:33 more
  • 一次對pool的誤用導致的.net頻繁gc的診斷分析

    <a href="https://www.cnblogs.com/dotnet-diagnostic/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/3115652/20230225090434.png" alt=""...

    uj5u.com 2023-03-28 10:13:31 more
  • C#遍歷指定檔案夾中所有檔案的3種方法

    <a href="https://www.cnblogs.com/xbhp/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/957602/20230310105611.png" alt="" /></a&...

    uj5u.com 2023-03-27 14:46:55 more
  • C#/VB.NET:如何將PDF轉為PDF/A

    <a href="https://www.cnblogs.com/Carina-baby/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/2859233/20220427162558.png" alt="" />...

    uj5u.com 2023-03-27 14:46:35 more
  • 武裝你的WEBAPI-OData聚合查詢

    <a href="https://www.cnblogs.com/podolski/" target="_blank"><img width="48" height="48" class="pfs" src="https://pic.cnblogs.com/face/616093/20140323000327.png" alt="" /><...

    uj5u.com 2023-03-27 14:46:16 more