A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 董振海 中级黑马   /  2012-10-11 18:20  /  2155 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

面试时遇到的一个算法题  一元一瓶汽水,两个空瓶能换一瓶汽水,问20元能喝多少瓶汽水 用程序写出结果...我想到的是递归...还有其他的方法么...

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

4 个回复

倒序浏览
吃饭的时候想了一下这个问题,用如下方法实现:
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: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;
                //返回能兑换的+已兑换的.就会递归得到最后的汽水数。
            }
        }
    }
}

评分

参与人数 1技术分 +2 收起 理由
郑文 + 2

查看全部评分

回复 使用道具 举报
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();            

评分

参与人数 1技术分 +2 收起 理由
郑文 + 2

查看全部评分

回复 使用道具 举报
和楼上两位同学想的不太一样,除此以外,也可做一点扩展:

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

QQ截图20121014202445.png

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马