竟然學過的東西都忘了 方程的解

2022-03-21 07:13:04 字數 1068 閱讀 1736

【描述】

乙個方程組x1+x2+...+xn=p。

其中 x1>=a1,x2>=a2,...,xn>=an。

現給出a數列,求方程的所有非負整數解共多少種。

【輸入描述】

有n+2行資料。第一行為n,接下來的n行為a數列。最後一行為p。

【輸出描述】

非負整數解的個數。

【樣例輸入】

【樣例輸出】

【分析】

因為每個x有乙個下限,我們設n1=p-tot,tot=a數列的和。那麼題目就是b1+b2+...+bn=n1,其中bi>=0的非負整數解的總數。這是高中數學排列組合中的問題。

假設有n1個球,我們在其中插入n-1個隔板,允許擋板之間沒有球。這樣的方案總數就是我們要求的。

可以將其看為一共n1+n-1個球,我們選出n-1個球。就是c(n1+n-1),(n-1)=(n1+n-1)!/((n-1)!*(n1)!)。

因為n1和n-1都很小,所以高精度也很好寫。

#include #include #define maxn 210

int len,p,n,tem,tot,n1,n2;

int ans[maxn],k,now,te[maxn];

int main()

scanf("%d",&p);

n1=p-tot;

n2=n-1;

ans[1]=1;

len=1;

for (int i=n1+n2;i>1;--i)

while (ans[len+1]) ++len;

}for (int i=n1;i>1;--i)

while (!ans[len]) --len;

}for (int i=n2;i>1;--i)

while (!ans[len]) --len;

}printf("%d",ans[len]);

for (int i=len-1;i>0;--i) printf("%d%d%d%d",ans[i]/1000,ans[i]/100%10,ans[i]/10%10,ans[i]%10);

return 0;

}

求方程的解

題目描述 求ax2 bx c 0方程的實根。a,b,c由鍵盤輸入.解方程要考慮係數a等於零的情況,且解x1 x2必須是float型。a等於零有兩種情況 b 0,b 0 a不等於零有三種情況 delta 0 0 0 先計算得到x1 x2,再printf輸出 輸入輸入三個數a,b,c 輸出輸出方程的實根...

求方程的解

求ax2 bx c 0方程的實根。a,b,c由鍵盤輸入.解方程要考慮係數a等於零的情況。a等於零有兩種情況 b 0,b 0 a不等於零有三種情況 delta 0 0 0 先計算得到根x1 x2,再輸出 輸入格式 輸入三個數a,b,c。輸出格式 輸出方程的實根 保留兩位小數 如果方程有1個實根,則輸出...

SQL簡單的東西都不會,這樣不行

sql基礎太差,要多整理 待續 1.sql oracle 1 如果字段值為字串,求出的是兩個字串的合併 2 如果字段值為int型,求出的是兩個字段值的和 如果數值為字串,求值的和,需轉換為int,在求和 select cast a as int cast b as int cast c as int...