码迷,mamicode.com
首页 > Windows程序 > 详细

InterviewQuestion_C#_Probl_计算1分2分5分硬币各有多少枚

时间:2017-09-08 10:03:33      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:解决   mon   view   指点   好处   cat   mount   ges   计算   

题目:现在有1分、2分、5分硬币共100个,总金额为2.46元,请用程序计算出1分、2分、5分各有多少枚,有多少种算法?

这是最近面试遇到的一个题目,刚开始没有思路,一看这是一个三元一次方程组,假设个数分别为a、b、c的话,就会有三个未知数和两个方程组,怎么解?数学真是白学了!

于是在网上搜到了这个题目,不过题目略有不同:

文件:Program1.cs

//问题:1分2分5分硬币,一共2.46元,求各种硬币的个数
//回答:你没说明是不是求需要的最少的硬币的个数,因为这样有上千种组成,所以我就给你写个控制台的,求需要最少的硬币个数吧

using System;

namespace ConsoleApplication1
{
    class Program1
    {
        static void Main(string[] args)
        {
            int money = 246;    //总共246分
            int number5;        //number5表示需要5分的硬币个数
            int number2;        //number2表示需要2分的硬币个数
            int number1;        //number1表示需要1分的硬币个数
            number5 = money / 5;
            number2 = (money % 5) / 2;
            number1 = money % 5 % 2;

            Console.WriteLine("需要:" + "\n"
                + "5分的硬币:" + number5 + "" + "\n"
                + "2分的硬币:" + number2 + "" + "\n"
                + "1分的硬币:" + number1 + "");

            Console.ReadLine();
        }
    }
}

运行结果:

技术分享

按照这个哥们儿的思路,设置三个未知数这一点与我是相同的,他给我的启发有下面几点:

  1. 将246也设置为一个变量money在代码中体现出来,那我同样可以将100也设置为一个变量,这样的好处是方便解决硬币个数变化为1000甚至10000的情况。
  2. 他用money这一个变量,通过取余和除法,完全独立的表示出了三个变量的值,启示我在遍历5分硬币的个数时,用5分硬币的个数可以完全独立的表示出1分和2分硬币的个数。
  3. 利用for循环遍历5分硬币的个数是另一个哥们给我的启发,既然只有2个方程3个未知数的三元一次方程,想想就知道答案可能不止一种,那给我的第一想法就是采用“试”的方法,先将一种硬币可能出现的个数“代”进去,幸运的是发现两个方程式可以通过加减,消除掉其中一个未知数,就可以做到上面提到的,用其中一个硬币的个数完全独立的表示出另外两枚硬币的个数。
    /*
        a + b + c = 100;
        a + 2b + 5c = 246;
        
        b = 246 - 100 - 4c;
        a = 3c - 246 + 2*100;
    
    */

     

文件:Program2.cs

using System;

namespace ConsoleApplication2
{
    class Program2
    {
        static void Main(string[] args)
        {
            int money = 246;        //总共246分
            int amount = 100;
            int number5;            //number5表示需要5分的硬币个数
            int number2;            //number2表示需要2分的硬币个数
            int number1;            //number1表示需要1分的硬币个数

            int count = 0;
            for (int i = 0; i < money/5; i++)
            {
                number5 = i;
                number2 = money - amount - 4 * number5;
                number1 = 3 * number5 - money + 2 * amount;
                if (number2 >= 0 && number1 >= 0)
                {
                    Console.WriteLine("5分:{0}个,2分:{1}个,1分:{2}个", number5, number2, number1);
                    count++;
                }
            }
            Console.WriteLine("共有{0}种算法……", count);
            Console.ReadLine();
        }
    }
}

计算结果:

技术分享

到此结束,如果上述过程中有任何的错误或者谁有更好的方法,希望看到的朋友不吝赐教,多多指点!

 

InterviewQuestion_C#_Probl_计算1分2分5分硬币各有多少枚

标签:解决   mon   view   指点   好处   cat   mount   ges   计算   

原文地址:http://www.cnblogs.com/jswl/p/7492678.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!