第三周作业(二)

时间:2022-04-02 22:14:31

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

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

 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万次没有找到答案,所以我认为找不到这个数。