zoukankan      html  css  js  c++  java
  • 阅读程序

    这次阅读的是c#程序代码,由于没接触过,还查了查c#的使用。不过大致还是能看懂的。阅读代码如下:

    using System;
    
    using System.Collections.Generic;
    
    using System.Text;
    
    namespace FindTheNumber
    
    {
      class Program
      {
        static void Main(string[] args)
        {
          int [] rg =
              {2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,
                20,21,22,23,24,25,26,27,28,29,30,31};
          for (Int64 i = 1; i < Int64.MaxValue; i++)
          {
            int hit = 0;
            int hit1 = -1;
            int hit2 = -1;
            for (int j = 0; (j < rg.Length) && (hit <=2) ; j++)
            {
              if ((i % rg[j]) != 0)
              {
                hit++;
                if (hit == 1)
                {
                  hit1 = j;
                }
                else if (hit == 2)
                {
                  hit2 = j;
                }
                else
                  break;
              }
    
            }
            if ((hit == 2)&& (hit1+1==hit2))
            {
              Console.WriteLine("found {0}", i);
            }
          }
        }
      }
    }

    网上搜索得知Int64为64位有符号整数,搜索MaxValue为Int64最大可能值。百度到的测试值代码及运行结果---->

    运行结果来看Int64/2结果有19位!

    i为从1开始一直到Int64的最大数,作为被除数;rg[]中的数作为除数;hit记录做了几次除法;hit1,hit2分别记录第一个,第二个不能整除的数。

    从循环以及判断条件来看,我认为这段程序是要找一个不能被rg数组中两个连续的数整除,能被这两个数后的一个数整除,将这样的一个数打印出来。

    在VS上运行程序,等了十多分钟也没见结果,Int64也确实很大。

    和湾姐讨论了好久,还算了好久,觉得自己可以将数算出来。开始将问题想得简单,认为最后两个数30,31的最小公倍数930不能被29,28整除便觉得930就是这个数了,于是直接将i改成930测试(Hello World 判断是否运行结束)

    发现不对,930并不是那个满足条件的数。我们又仔细的想了想认为这个数可能是不存在的,不能被2~31中两个连续的数整除,但能被其余的任何一个数整除。个人觉得这样的数不存在。

    多核计算机处理这个程序是否可以用到多线程处理,程序并发执行。只是操作系统课有讲过多线程,而具体怎么做也是不明白……

    对于问题三,估计运行时间,真的是估计不出来……

  • 相关阅读:
    日程管理系统找Bug
    #单元测试
    读后感
    四则运算
    事后诸葛亮会议
    数据流图和数据流程图
    时序图
    ER图
    uml用例图
    第一迭代感想
  • 原文地址:https://www.cnblogs.com/cuilulu/p/5295098.html
Copyright © 2011-2022 走看看