• Console算法[for,if,break]五个好朋友分苹果


    ylbtech-Arithmetic:Console-算法[for,if,break]-五个好朋友分苹果
     
    1.A,案例
    -- ========================================================
    -- ylb:算法
    -- Type:算法[for,if,break]
    -- munu:五个好朋友分苹果
    -- thankyou:sunshine
    -- 13:02 2012/3/17
    -- ========================================================    
     
          五个好朋友分一堆苹果,第一个人把苹果分成5份,为了公平,扔掉了多余的1个苹果,拿上自己一份走了。第二人来了,把剩余的苹果分成5份,扔掉多余的1个,拿上自己一份走了。以后来的三个人都是这样做的。那么,最初有多少个苹果呢?
     
    分析:
        根据分苹果的方法我们可以看出,每个人分苹果时都是扔掉1个后变成了5的整数倍,所以才能分成5份。那么当这个人拿去一份后,剩余的是4份苹果,所以剩余的数一定是4的整数倍。所以,每个人所看到的数目一定是减1后,既是5的整数倍,又是4的整数倍。因此可构建为:1+4+5+X(X为未知的正整数或0)。
        设m为第i个人所看到的苹果数,n代表第i-1个人所看的到苹果数,那么这两个数字应该满足这样的关系:m=(n-1)/5*4
        例如当i=2时,代表第2个人所看到的苹果数=(第一个人看到的苹果数减去1个,再分成5份,因为第一个人拿走1份,所以乘以4份)。所以,这个表达式成立。
        因此m和n都应该满足1+4*5*X这个表达式。这是一个二重循环,外循环不能确定执行多少次,只好总最小数21开始试算。内循环判断苹果数是否能被5整除,如果不能被整除则退出内循环,外循环的苹果数直接加20。因为20是满足既能被5整除,又能被4整除的最小数。
       从1开始的原因1是最小的满足1=1+4*5*X的正整数(当X为0时)。
    1.B,解决方案
    using System;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            /// <summary>
            /// ylb:五个好朋友分苹果
            /// 12:56 2012/3/17
            /// </summary>
            /// <param name="args"></param>
            static void Main(string[] args)
            {
                int i, m, n = 1;
                for (; ; )
                {
                    n = n + 4 * 5;
                    m = n;
                    for (i = 0; i < 5; i++)
                    {
                        if ((m - 1) % 5 != 0)
                            break;
                        else
                            m = (m - 1) / 5 * 4;
                    }
                    if (i == 5)
                        break;
                }
                Console.WriteLine(string.Format("原来有{0}个苹果!",n));
            }
        }
    }
    1.C,运行结果
    原来有3121个苹果!
    请按任意键继续. . .
    warn 作者:ylbtech
    出处:http://ylbtech.cnblogs.com/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    windows 7鼠标右键另存为没有桌面选项
    我心目中的Asp.net核心对象
    谈谈C# 4.0新特性“缺省参数”的实现
    C#正则表达式
    Request[]与Request.Params[]
    智力题
    SQL Server类型与C#类型对应关系
    UPdatepanel 的 优点 缺点
    细说 Request[]与Request.Params[]
    display:block 前后会换行
  • 原文地址:https://www.cnblogs.com/ylbtech/p/2921875.html
Copyright © 2020-2023  润新知