首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

一个算法有关问题求解.

2012-04-07 
一个算法问题求解...要求写个方法 传如一个10以内的整数public string num(int i){....代码}例如:参数为5

一个算法问题求解...
要求写个方法 传如一个10以内的整数 
public string num(int i){....代码}
例如: 参数为5 则 求 {1,2,3,4,5} 5个数内 凑出等于10的数。
  参数为8 则 求 {1,2,3,4,5,6,7,8} 8个数 内 凑出 等于 10的数。

  我想了好长时间 没有好的方法。。 求解.....

[解决办法]
10以内的正整数 和为10的数字组合是很有限的,
完全可以用二维数组来做
[解决办法]
憨货!算介个做球啊!
[解决办法]
背包问题,有点像
[解决办法]
这个算法很有意思哦,
等工作忙完了写一个看看
[解决办法]

C# code
 public static void GetA2(int num)        {            //Num数字集合 Sum数字之和            List<string> list = new List<string>();            list = GetNum(list, 10, num, "");            list.Sort();            foreach (string str in list)            {                Console.WriteLine(str);            }        }
[解决办法]
简单问题复杂化了
[解决办法]
如果只有加的话,全排列吧
[解决办法]
C# code
        static void Main(string[] args)        {            int i = 6;            int[] arr = Enumerable.Range(1, i).ToArray();            int sum = 10, c = 0;            bool[] flag = new bool[i];            Calculate(arr, c, sum, flag);            Console.ReadLine();        }        public static void Calculate(int[] arr, int c, int sum, bool[] flag)        {            if (sum == 0)                Output(arr, c, flag);            else            {                if (c == arr.Length)                    return;                else                {                    flag[c] = true;                    if (sum - arr[c] >= 0)                        Calculate(arr, c + 1, sum - arr[c], flag);                    flag[c] = false;                    if (sum >= 0)                        Calculate(arr, c + 1, sum, flag);                }            }        }        public static void Output(int[] arr, int c, bool[] flag)        {            for (int i = 0; i < c; i++)            {                if (flag[i])                    Console.Write("{0,2}", arr[i]);            }            Console.WriteLine();        }/* 1 2 3 4 1 3 6 1 4 5 2 3 5 4 6*/
[解决办法]
2 8
3 7
算漏了

[解决办法]
汗 不好意思 没有看到 i=6
[解决办法]
呵呵,有意思~!
[解决办法]
造个方法递归调用
[解决办法]
C# code
        public void Main()        {            num(10, 6);        }        /// <summary>        ///         /// </summary>        /// <param name="value">匹配值</param>        /// <param name="i">最大数</param>        public void num(int value, int i)        {            num2(0, 0, value, i, "");        }        public void num2(int i, int flag, int value, int maxvalue, string output)        {            int temp = flag + i;            if (flag > 0)            {                if (output == "")                {                    output = flag.ToString();                }                else                {                    output = output + "," + flag;                }            }            if (temp == value)            {                Response.Write(output + "<br>");                Console.WriteLine(output);            }            else if (temp < value)            {                for (int k = 1; k <= maxvalue - flag; k++)                {                    num2(temp, flag + k, value, maxvalue, output);                }            }        } 

热点排行