zoukankan      html  css  js  c++  java
  • C#

    • 时间:2017-09-08 整理:byzqy

    题目:现在有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("需要:" + "
    "
                    + "5分的硬币:" + number5 + "" + "
    "
                    + "2分的硬币:" + number2 + "" + "
    "
                    + "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();
            }
        }
    }

    计算结果:

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

  • 相关阅读:
    c博客06-2019-结构体&文件
    C博客作业05--2019-指针
    C语言博客作业04--数组
    Java购物车
    c博客06-2019-结构体&文件
    数组和指针的选择排序和冒泡排序区别
    C博客作业05--2019-指针
    面向对象设计大作业-图书馆系统
    java-购物车大作业
    互评-OO之接口-DAO模式代码阅读及应用
  • 原文地址:https://www.cnblogs.com/jswl/p/7492678.html
Copyright © 2011-2022 走看看