【描述】
乙個方程組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 210int 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...