有三个数1,2,5
要求这三个数用不同的方法相加得到100,比如100个1相加等于100,或者50个1与25个2相加等于100

解决方案 »

  1.   

    int x, y, z;
               for (x = 0; x <= 100; x++)
               {
                   for (y = 100 - x; y >= 0; y--)
                   {
                       for (z = 100 - x - y; z >= 0; z--)
                       {
                           if (1 * x + y * 2 + z * 5 == 100)
                               Response.Write(string.Format("1*{0}+2*{1}+5*{2}<br/>", x, y, z)); 
                       } 
                   } 
               }
      

  2.   


    //f(n) = f(n-5) + f(n-2) + f(n-1);
            //任何数量 n 的钱,可有有3种方式累加到
            //1. 由 n-5 的钱 加 5 块得到(大于5时)
            //2. 由 n-2 的钱 加 2 块得到(大于2时)
            //3. 由 n-1 的钱 加 1 块得到(大于1时)
            //如果这里直接用递归的话,效率比较低,当参数比较大时也容易溢出
            public static int GetTheNum(int value)
            {
                int[] nums = {1,2,3,5,8};//这里投机了下 先把1-5块的方式初始化了
                if (value < 1) return 0;
                if(value < 6) return nums[value-1];            int temp = 0;
                while (value - 5 > 0)
                {
                    temp = nums[4] + nums[3] + nums[0];
                    for (int i = 0; i < 4; i++)
                    {
                        nums[i] = nums[i + 1];
                    }
                    nums[4] = temp;
                    value--;
                }
                return temp;
            }楼主  我打印语句没加呢 你先看看这个
    我再琢磨下怎么把打印也给加进去  我也菜鸟 呵呵
      

  3.   


    for (int i = 0; i <= 20; i++)
                {
                    for (int j = 0; j <= (100 - 5 * i) / 2;j++ )
                    {
                        for (int k = 0; k <= 100 - 5 * i - 2 * j; k++)
                        {
                            if (5 * i + 2 * j + k == 100)
                            {
                                Console.WriteLine(i + "  " + j + "  " + k);
                            }
                        }
                    }
                }
      

  4.   

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Text.RegularExpressions;
    using System.Collections;
    using System.Xml.Linq;namespace ConsoleCSharp
    {
          
      
        class Program
        {
           
            static void Main(string[] args)
            { 
                int[] arrInt = new int[] { 1, 2, 5 };
                count(100 , arrInt,"");
                
            }
            public static void count(int n, int[] arr,string s)
            {
                if (n < 0)
                    return;
                if (n == 0)
                {
                    Console.WriteLine(s);
                }
                for (int i = 0; i <arr.Length; i++)
                {
                    count(n - arr[i], arr,s + arr[i]);
                }        }
        }
    }用递归来实现
      

  5.   


    class Class1
        {
            public static void Main(string[] args)
            {
                PrintHowToDivide(100);
                System.Console.ReadKey();
            }
            public static void PrintHowToDivide(int value)
            {
                int temp = value;
                int five = value / 5;
                value %= 5;
                int two = value / 2;
                value %= 2;
                int one = value;
                PrintHowToDivide(temp, five, two, one);
            }
                /*
             *  value为需要分解的钱,num_five,  num_two,  num_one 分别为当前的 5 2 1块的张数
             *  
             * */
            private static void PrintHowToDivide(int value, int num_five, int num_two, int num_one)
            {
                System.Console.WriteLine(" {0} 块钱有如下分法: {1} 张 1 元,{2} 张 2 元,{3} 张 5 元",value,num_one,num_two,num_five);
                if (num_one == value) return;
                if (num_five > 0)
                {
                    if (num_one > 0)
                    {
                        PrintHowToDivide(value, num_five - 1, num_two + 3, num_one - 1);
                    }
                    else
                    {
                        PrintHowToDivide(value, num_five - 1, num_two + 2, num_one + 1);
                    }
                }
                else if(num_two > 0)
                {
                    PrintHowToDivide(value, num_five, num_two - 1, num_one + 2);
                }
            }    }这下可以了 哈哈 很快的
      

  6.   

    改好了class Class1
        {
            public static void Main(string[] args)
            {
                PrintHowToDivide(100);
                System.Console.ReadKey();
            }
            public static void PrintHowToDivide(int value)
            {
                int temp = value;
                int five = value / 5;
                value %= 5;
                int two = value / 2;
                value %= 2;
                int one = value;
                PrintHowToDivide(temp, five, two, one);
            }
                /*
             *  value为需要分解的钱,num_five,  num_two,  num_one 分别为当前的 5 2 1块的张数
             *  
             * */
            private static void PrintHowToDivide(int value, int num_five, int num_two, int num_one)
            {
                System.Console.WriteLine(" {0} 块钱有如下分法: {1} 张 5 元,{2} 张 2 元,{3} 张 1 元", value, num_five, num_two, num_one);
                if (num_one == value) return;
                if (num_two > 0)
                {
                    PrintHowToDivide(value, num_five, num_two - 1, num_one + 2);
                }
                else if (num_five > 0)
                {
                    if (num_one > 0)
                    {                    PrintHowToDivide(value, num_five-1, num_two + 3, num_one - 1);                }
                    else
                    {
                        PrintHowToDivide(value, num_five-1, num_two + 2, num_one + 1);
                    }
                }
            }
        }测试结果
     100 块钱有如下分法: 20 张 5 元,0 张 2 元,0 张 1 元
     100 块钱有如下分法: 19 张 5 元,2 张 2 元,1 张 1 元
     100 块钱有如下分法: 19 张 5 元,1 张 2 元,3 张 1 元
     100 块钱有如下分法: 19 张 5 元,0 张 2 元,5 张 1 元
     100 块钱有如下分法: 18 张 5 元,3 张 2 元,4 张 1 元
     100 块钱有如下分法: 18 张 5 元,2 张 2 元,6 张 1 元
     100 块钱有如下分法: 18 张 5 元,1 张 2 元,8 张 1 元
     100 块钱有如下分法: 18 张 5 元,0 张 2 元,10 张 1 元
     100 块钱有如下分法: 17 张 5 元,3 张 2 元,9 张 1 元
     100 块钱有如下分法: 17 张 5 元,2 张 2 元,11 张 1 元
     100 块钱有如下分法: 17 张 5 元,1 张 2 元,13 张 1 元
     100 块钱有如下分法: 17 张 5 元,0 张 2 元,15 张 1 元
     100 块钱有如下分法: 16 张 5 元,3 张 2 元,14 张 1 元
     100 块钱有如下分法: 16 张 5 元,2 张 2 元,16 张 1 元
     100 块钱有如下分法: 16 张 5 元,1 张 2 元,18 张 1 元
     100 块钱有如下分法: 16 张 5 元,0 张 2 元,20 张 1 元
     100 块钱有如下分法: 15 张 5 元,3 张 2 元,19 张 1 元
     100 块钱有如下分法: 15 张 5 元,2 张 2 元,21 张 1 元
     100 块钱有如下分法: 15 张 5 元,1 张 2 元,23 张 1 元
     100 块钱有如下分法: 15 张 5 元,0 张 2 元,25 张 1 元
     100 块钱有如下分法: 14 张 5 元,3 张 2 元,24 张 1 元
     100 块钱有如下分法: 14 张 5 元,2 张 2 元,26 张 1 元
     100 块钱有如下分法: 14 张 5 元,1 张 2 元,28 张 1 元
     100 块钱有如下分法: 14 张 5 元,0 张 2 元,30 张 1 元
     100 块钱有如下分法: 13 张 5 元,3 张 2 元,29 张 1 元
     100 块钱有如下分法: 13 张 5 元,2 张 2 元,31 张 1 元
     100 块钱有如下分法: 13 张 5 元,1 张 2 元,33 张 1 元
     100 块钱有如下分法: 13 张 5 元,0 张 2 元,35 张 1 元
     100 块钱有如下分法: 12 张 5 元,3 张 2 元,34 张 1 元
     100 块钱有如下分法: 12 张 5 元,2 张 2 元,36 张 1 元
     100 块钱有如下分法: 12 张 5 元,1 张 2 元,38 张 1 元
     100 块钱有如下分法: 12 张 5 元,0 张 2 元,40 张 1 元
     100 块钱有如下分法: 11 张 5 元,3 张 2 元,39 张 1 元
     100 块钱有如下分法: 11 张 5 元,2 张 2 元,41 张 1 元
     100 块钱有如下分法: 11 张 5 元,1 张 2 元,43 张 1 元
     100 块钱有如下分法: 11 张 5 元,0 张 2 元,45 张 1 元
     100 块钱有如下分法: 10 张 5 元,3 张 2 元,44 张 1 元
     100 块钱有如下分法: 10 张 5 元,2 张 2 元,46 张 1 元
     100 块钱有如下分法: 10 张 5 元,1 张 2 元,48 张 1 元
     100 块钱有如下分法: 10 张 5 元,0 张 2 元,50 张 1 元
     100 块钱有如下分法: 9 张 5 元,3 张 2 元,49 张 1 元
     100 块钱有如下分法: 9 张 5 元,2 张 2 元,51 张 1 元
     100 块钱有如下分法: 9 张 5 元,1 张 2 元,53 张 1 元
     100 块钱有如下分法: 9 张 5 元,0 张 2 元,55 张 1 元
     100 块钱有如下分法: 8 张 5 元,3 张 2 元,54 张 1 元
     100 块钱有如下分法: 8 张 5 元,2 张 2 元,56 张 1 元
     100 块钱有如下分法: 8 张 5 元,1 张 2 元,58 张 1 元
     100 块钱有如下分法: 8 张 5 元,0 张 2 元,60 张 1 元
     100 块钱有如下分法: 7 张 5 元,3 张 2 元,59 张 1 元
     100 块钱有如下分法: 7 张 5 元,2 张 2 元,61 张 1 元
     100 块钱有如下分法: 7 张 5 元,1 张 2 元,63 张 1 元
     100 块钱有如下分法: 7 张 5 元,0 张 2 元,65 张 1 元
     100 块钱有如下分法: 6 张 5 元,3 张 2 元,64 张 1 元
     100 块钱有如下分法: 6 张 5 元,2 张 2 元,66 张 1 元
     100 块钱有如下分法: 6 张 5 元,1 张 2 元,68 张 1 元
     100 块钱有如下分法: 6 张 5 元,0 张 2 元,70 张 1 元
     100 块钱有如下分法: 5 张 5 元,3 张 2 元,69 张 1 元
     100 块钱有如下分法: 5 张 5 元,2 张 2 元,71 张 1 元
     100 块钱有如下分法: 5 张 5 元,1 张 2 元,73 张 1 元
     100 块钱有如下分法: 5 张 5 元,0 张 2 元,75 张 1 元
     100 块钱有如下分法: 4 张 5 元,3 张 2 元,74 张 1 元
     100 块钱有如下分法: 4 张 5 元,2 张 2 元,76 张 1 元
     100 块钱有如下分法: 4 张 5 元,1 张 2 元,78 张 1 元
     100 块钱有如下分法: 4 张 5 元,0 张 2 元,80 张 1 元
     100 块钱有如下分法: 3 张 5 元,3 张 2 元,79 张 1 元
     100 块钱有如下分法: 3 张 5 元,2 张 2 元,81 张 1 元
     100 块钱有如下分法: 3 张 5 元,1 张 2 元,83 张 1 元
     100 块钱有如下分法: 3 张 5 元,0 张 2 元,85 张 1 元
     100 块钱有如下分法: 2 张 5 元,3 张 2 元,84 张 1 元
     100 块钱有如下分法: 2 张 5 元,2 张 2 元,86 张 1 元
     100 块钱有如下分法: 2 张 5 元,1 张 2 元,88 张 1 元
     100 块钱有如下分法: 2 张 5 元,0 张 2 元,90 张 1 元
     100 块钱有如下分法: 1 张 5 元,3 张 2 元,89 张 1 元
     100 块钱有如下分法: 1 张 5 元,2 张 2 元,91 张 1 元
     100 块钱有如下分法: 1 张 5 元,1 张 2 元,93 张 1 元
     100 块钱有如下分法: 1 张 5 元,0 张 2 元,95 张 1 元
     100 块钱有如下分法: 0 张 5 元,3 张 2 元,94 张 1 元
     100 块钱有如下分法: 0 张 5 元,2 张 2 元,96 张 1 元
     100 块钱有如下分法: 0 张 5 元,1 张 2 元,98 张 1 元
     100 块钱有如下分法: 0 张 5 元,0 张 2 元,100 张 1 元
    耗时31毫秒
      

  7.   


    class Class1
        {
            public static void Main(string[] args)
            {
                PrintHowToDivide(100);
                System.Console.ReadKey();
            }
            public static void PrintHowToDivide(int value)
            {
                int temp = value;
                int five = value / 5;
                value %= 5;
                int two = value / 2;
                value %= 2;
                int one = value;
                PrintHowToDivide(temp, five, two, one);
            }
                /*
             *  value为需要分解的钱,num_five,  num_two,  num_one 分别为当前的 5 2 1块的张数
             *  
             * */
            private static void PrintHowToDivide(int value, int num_five, int num_two, int num_one)
            {
                System.Console.WriteLine(" {0} 块钱有如下分法: {1} 张 5 元,{2} 张 2 元,{3} 张 1 元", value, num_five, num_two, num_one);
                if (num_one == value) return;
                if (num_two > 0)
                {
                    PrintHowToDivide(value, num_five, num_two - 1, num_one + 2);
                }
                else if (num_five > 0)
                {
                    PrintHowToDivide(value, num_five - 1, num_two + (num_one + 5) / 2, (num_one + 5) % 2);
                }
            }
        }
      

  8.   

    感谢人民,感谢社会主义,结帖了,
    keeya0416,感谢这们仁兄
      

  9.   

    呵呵 我也是C#新手
    JAVA阵营叛变过来的