黑马程序员技术交流社区

标题: 一个算法题... [打印本页]

作者: 董振海    时间: 2012-10-11 18:20
标题: 一个算法题...
面试时遇到的一个算法题  一元一瓶汽水,两个空瓶能换一瓶汽水,问20元能喝多少瓶汽水 用程序写出结果...我想到的是递归...还有其他的方法么...

作者: 秦敖    时间: 2012-10-11 20:03
吃饭的时候想了一下这个问题,用如下方法实现:
using System;

namespace 汽水问题
{
    class Program
    {
        public static void Main(string[] args)
        {
            int Colo_Num=20;//初始时喝的的汽水数量,20块钱就买了20瓶
            int Pz_Num=20;//保存的瓶子数量,最初为20瓶汽水,所以20个瓶子
            while(Pz_Num/2>=1)//2个空瓶换1瓶,如果能换就要换哦。
            {
                Colo_Num=Colo_Num+Pz_Num/2;//累加汽水数
                Pz_Num=Pz_Num/2+Pz_Num%2;//瓶子的数量总是等于换到的汽水数+剩下的空瓶数。因为是2空瓶换1瓶,如果空瓶数为奇数就会有剩余。
            }
            Console.WriteLine("最后的汽水数为:{0}",Colo_Num);
            Console.ReadKey(true);
        }
    }
}

作者: 秦敖    时间: 2012-10-11 20:28
本帖最后由 秦敖 于 2012-10-11 20:36 编辑

然后思考了一下,用递归也实现了一把。
using System;

namespace 汽水问题递归实现
{
    class Program
    {
        public static void Main(string[] args)
        {
            int Color_Num=20;
            Color_Num=Color_Num+Color(20);
            Console.WriteLine("最后喝的汽水数为:{0}",Color_Num);
            Console.ReadKey(true);
        }
        /// <summary>
        /// 计数空瓶换汽水喝的函数。
        /// </summary>
        /// <param name="Num">Num代表汽水瓶的数量</param>
        /// <returns></returns>
        static int Color(int Num)
        {
            if(Num/2<1)//如果不能换递归结束
            {
                return 0;
            }
            else
            {
                //Num/2为兑换的汽水瓶数,Num/2+Num%2代表:汽水瓶子数量=兑换的汽水数+余下的空瓶数。
                return Color(Num/2+Num%2)+Num/2;
                //返回能兑换的+已兑换的.就会递归得到最后的汽水数。
            }
        }
    }
}

作者: 潘梦军    时间: 2012-10-12 10:14
Console.Write("请输入用多少元买汽水:");
            int start = 20, sum = 20;     //初始时喝的的汽水数量,20块钱就买了20瓶,刚开始可以剩余20个空瓶   
            if (Int32.TryParse(Console.ReadLine(), out start))
            {
                sum = start;   //最多喝多少瓶,刚开始买了20瓶
            }
            else
            {
                Console.WriteLine("输入有问题,请重新输入正确的数字。");
            }

            while (start / 2 >= 1)
            {
                sum += start / 2;
                start = start % 2 + start / 2;
            }
            Console.WriteLine("20块钱最多可以喝{0}瓶汽水,还剩余{1}个空瓶。", sum, start);

            Console.ReadKey();            
作者: 蔡嘉    时间: 2012-10-14 20:25
和楼上两位同学想的不太一样,除此以外,也可做一点扩展:

QQ截图20121014202445.png (27 KB, 下载次数: 108)

QQ截图20121014202445.png





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2