zoukankan      html  css  js  c++  java
  • 第三次作业(二)————————————程序阅读

    这是第三次作业的第二部分,阅读他人程序并理解加以改进。

    下面是源代码:

    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);
            }
          }
        }
      }
    }

    该程序使用C#语言编写,但是因为有C语言的功底,所以大部分语句都能理解。该程序的目的很明确,就是寻找一种数。程序用两个for循环嵌套进行控制,开始我并不明白 Int64 i = 1; i < Int64.MaxValue 这表明的数的范围有多大,通过上网查资料,我明白了int64指的是占有8字节64bit的长整数,表示值介于-2^63~2^63-1。所以可以看出这个循环控制的是寻找数的范围。

    接下来看下一个循环 for (int j = 0; (j < rg.Length) && (hit <=2) ; j++) ,输入数组里包含三十个整数,2~31,所以rg.length=30。


              if ((i % rg[j]) != 0)
              {
                hit++;
                if (hit == 1)
                {
                  hit1 = j;
                }
                else if (hit == 2)
                {
                  hit2 = j;
                }
                else
                  break;
              }

    通过这个判断语句可以看出,hit是一个控制是否被整除的次数的变量。所以要找寻的数首先要满足在1~MaxLalue之内不能被整除,hit1作为第一个不能被整除数的下标,hit2作为第二个不能被整除书的下标,但是从最后的输出判断语句来看,当(hit1+1==hit2)时才能输出,所以还要要求是两个相邻的数,当我想明白这一点我就隐隐猜到估计没有这样的数。后来在VS上跑了一上午,但是始终没有结果,我也不清楚是我的电脑性能不强还是这个数真的找不到。

    这次的代码阅读分析作业让我学到了很多,尤其让我体会到阅读和修改别人代码的困难之处。就像张老师在课上说的:老程序员宁可自己写一个算法来实现别人想要的功能,也不愿意修改别人的代码。的确是这样,阅读并理解别人的代码首先就要用别人的思维方式思考问题,更别提要修改了。在这上面花费的时间,可能比重新写一个算法程序消耗的时间还多。这也为我以后的学习生活提了个醒,如果有需要别人帮忙修改,一定要将自己的想法与思路与人分享,这样才能互利互惠,更有助于今后团队项目开发,对提升工作效率和项目成功率有着很大的帮助。

  • 相关阅读:
    基于遗传算法(Genetic Algorithm)的TSP问题求解(C)
    分治思想:合并排序和快速排序
    冒泡排序和选择排序
    WPF线程
    DataGrid属性和事件
    WPF限制TextBox只能输入数字
    键盘键值对应表
    转换人民币大小金额
    查找DataGrid某个单元格中的控件
    WPF中DataGrid使用初步
  • 原文地址:https://www.cnblogs.com/Ssunyujia/p/5295086.html
Copyright © 2011-2022 走看看