• 第三周作业(二)


      这次的作业练习的是我们读懂别人程序的能力。代码不长,但是想看懂还是稍有麻烦

      整体代码如下,由于代码不长,就不一一列举出来了。

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

      最初我以为是要求出一个这样的数,这个数不被数组内连续的三个数所整除,当三次判断后break结束循环,跳到最后一个if判断。但是最后一个判断条件是 hit==2,而我设想的数找到后hit应该是等于3,于是我明白自己的想法错了。后来我明白,找到这个数的条件应该是遍历了整个数组,而找到的这个数应该能被数组内除了两个相邻的数外任意一个数整除。遍历整个数组后,hit 即不被整除的次数为2,并且hit1记录的第一个不被整除的数的下标,和hit2记录的第二个不被整除的数的下标相差正好为1。

      可能我的判断和正确结果仍有出入,但是我觉得,这样的作业锻炼了我们读懂他人程序的能力,也提醒了我们,写自己的程序时要注意学会使用注释,这样方便自己日后使用,也方便他人阅读你的代码。

      至于后两个问题,在我所学范围内无法给出解答,答案我在本机上运行循环100万次没有找到答案,所以我认为找不到这个数。

  • 相关阅读:
    显著提升程序员身心健康和工作效率的装备有哪些?
    谁控制了我们的浏览器?
    利用Http Authentication Url+csrf劫持路由器DNS
    如​何​删​除​G​P​T​保​护​分​区
    Linux定时器的使用
    缺少 mcrypt 扩展。请检查 PHP 配置。(phpmyadmin)
    xxx is not in the sudoers file
    linux mysql 找不到 <mysql/mysql.h>
    C++面试常见问题(持续更新)
    代码模板(new)
  • 原文地址:https://www.cnblogs.com/lishida/p/5288849.html
Copyright © 2020-2023  润新知