制作網(wǎng)站程序黑帽seo培訓大神
做了一個彩票程序,為了復式投注頗費了點腦筋,網(wǎng)上找了半天,才知道這個公式,比如36選7,如果買10個號,公式就是:
10!/ (10-7)!/ 7!
?
順手做了一個測試程序:
- using?System;
- public?class?Test{
- ????public?static?void?Main(string[]?args){
- ????????int?a?=?5;??//?選擇了幾?
- ????????int?b?=?2;
- ????????try{
- ????????????if(args.Length?==?1){
- ????????????????b?=?int.Parse(args[0]);
- ????????????}?else?if(args.Length?>=?2){
- ????????????????a?=?int.Parse(args[0]);
- ????????????????b?=?int.Parse(args[1]);
- ????????????}
- ????????}catch{
- ????????????Console.WriteLine("請正確輸入");
- ????????????return;
- ????????}
- ????????
- ????????int?d?=?GetCount(a,?b);
- ????????Console.WriteLine("{0},{1},{2}",?a,b,d);
- ????}
- ????
- ????//buyNum?:?購買的數(shù)字個數(shù)?
- ????//perNum?:?每注要求的數(shù)字個數(shù)?
- ????//?返回值為?:?buyNum!/(buyNum-perNum)!/perNum!?
- ????public?static?int?GetCount(int?buyNum,?int?perNum){
- ????????if(perNum?==?buyNum)
- ????????????return?1;
- ????????????
- ????????if(perNum?>?buyNum){
- ????????????throw?new?Exception("后者必須比前者小!");
- ????????}else?if(perNum?<=?0){
- ????????????throw?new?Exception("后者不能小于0!");
- ????????}
- ????????
- ????????//?這3行能提高一點效率,并降低一部分溢出的可能?
- ????????int?diff?=?buyNum?-?perNum;
- ????????if?(diff?>?perNum)
- ????????????perNum?=?diff;
- ????????????
- ????????int?result?=?1;
- ????????for(int?i=perNum?+?1;i<=buyNum;i++){
- ????????????result?*=?i;
- ????????}
- ????????
- ????????for(int?i=1;i<=buyNum?-?perNum;i++){
- ????????????result?/=?i;
- ????????}
- ????????return?result;
- ????????/*
- ?????????8個號碼選7=???8注
- ?????????9個號碼選7=??36注
- ????????10個號碼選7=?120注
- ????????11個號碼選7=?330注
- ????????12個號碼選7=?792注
- ????????*/
- ????}
- }
下面是生成復式投注時,列出組合號碼的列表的代碼:
- ///?<summary>
- ///?從數(shù)組中查找s個數(shù)字的組合,并返回全部組合(根據(jù)復式彩票投注的號碼,返回對應的全部號碼組列表)
- ///?</summary>
- ///?<param?name="arr">數(shù)組(購買的數(shù)字列表)</param>
- ///?<param?name="s">大于0的整數(shù)(每注要求的數(shù)字個數(shù))</param>
- ///?<returns></returns>
- List<List<int>>?GetCountList(int[]?arr,?int?s)
- {
- ????if?(s?<?1)
- ????????throw?new?Exception("選擇個數(shù)不能小于1!");
- ????if?(arr?==?null?||?arr.Length?==?0?||?arr.Length?<?s)
- ????????throw?new?Exception("數(shù)組不能為空?或?小于必選個數(shù)!");
- ????if?(arr.Length?==?s)
- ????{
- ????????#region?數(shù)組長度等于s時,直接返回1個組合
- ????????List<List<int>>?l_ret?=?new?List<List<int>>();
- ????????List<int>?l_item?=?new?List<int>();
- ????????foreach?(int?item?in?arr)
- ????????{
- ????????????l_item.Add(item);
- ????????}
- ????????l_ret.Add(l_item);
- ????????#endregion
- ????????return?l_ret;
- ????}
- ????if?(s?==?1)
- ????{
- ????????#region?從數(shù)組中查找1個數(shù)字的組合,直接把數(shù)組各元素返回
- ????????List<List<int>>?l_ret?=?new?List<List<int>>();
- ????????foreach?(int?item?in?arr)
- ????????{
- ????????????List<int>?l_item?=?new?List<int>();
- ????????????l_item.Add(item);
- ????????????l_ret.Add(l_item);
- ????????}
- ????????#endregion
- ????????return?l_ret;
- ????}
- ????List<List<int>>?l_arrTmp?=?new?List<List<int>>();
- ????for?(int?i?=?0;?i?<?arr.Length?-?s;?i++)
- ????{
- ????????//?后面的數(shù)任意取s-1個
- ????????int[]?tmp?=?GetArray(arr,?i);
- ????????List<List<int>>?l_arrTmp1?=?GetCountList(tmp,?s?-?1);
- ????????foreach?(List<int>?item?in?l_arrTmp1)
- ????????{
- ????????????item.Insert(0,?arr[i]);
- ????????????l_arrTmp.Add(item);
- ????????}
- ????}
- ????List<int>?l_lastItem?=?new?List<int>();
- ????for?(int?i?=?arr.Length?-?s;?i?<?arr.Length;?i++)
- ????{
- ????????l_lastItem.Add(arr[i]);
- ????}
- ????l_arrTmp.Add(l_lastItem);
- ????return?l_arrTmp;
- }
- ///?<summary>
- ///?把arr數(shù)組中,位置為beg之后的元素全部放入一個新數(shù)組返回(不包含beg元素)
- ///?</summary>
- ///?<param?name="arr"></param>
- ///?<param?name="beg"></param>
- ///?<returns></returns>
- private?static?int[]?GetArray(int[]?arr,?int?beg)
- {
- ????int[]?tmp?=?new?int[arr.Length?-?(beg?+?1)];
- ????for?(int?i?=?beg?+?1;?i?<?arr.Length;?i++)
- ????????tmp[i?-?(beg?+?1)]?=?arr[i];
- ????return?tmp;
- }
?
?
?
?
?
?