第三周作业 --- 阅读程序

这周老师布置了一个阅读程序的作业。

问题如下:

阅读下面程序,请回答如下问题:

问题1:这个程序要找的是符合什么条件的数?

问题2:这样的数存在么?符合这一条件的最小的数是什么?

问题3:在电脑上运行这一程序,你估计多长时间才能输出第一个结果?时间精确到分钟(电脑:单核CPU 4.0G Hz,内存和硬盘等资源充足)。

问题4:在多核电脑上如何提高这一程序的运行效率?

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

  1、通过分析可以知道,代码中hit为数组中数字不能整除i的次数,hit1为第一次不能整除的数的下标,同理hit2为第二次不能整除的数的下标。通过最后一个if判断可知,要找的这个数字i应该是只能被数组内两个数不整除,并且这两个数在数组中相邻。2、上网查了下,Int64.MaxValue的值为18446744073709551615。我不确定这样的数是否存在,我运行了好久没出结果,暂且当成找不到结果。3、由于循环次数过多,以及我所学知识的限制,这个程序的时间复杂度为O(n),但是具体时间却无法确定。4、所学知识有限,不知道如何提高效率。

时间: 2025-01-09 03:15:38

第三周作业 --- 阅读程序的相关文章

第三次作业 阅读程序有符号 64 位整数数据类型

这是一个C++程序,,,额,看着头痛(额,说实话,由于中间有一年多没上过学,再加上最开始也学的很一般,读起来累)不过什么东西慢慢来总能越来越好 问题一: 答: 首先Int64 i 是表示有符号 64 位整数数据类型,这个数i范围很大 -2^63 ( -9,223,372,036,854,775,808) 到2^63-1(+9,223,372,036,854,775,807 )....我表示大学这么几年,程序里面遇见这种情况的次数少 由此可见学校的东西和实际毕竟还是差距很大 然后看for循环 fo

解题报告——-2018级2016第二学期第三周作业

解题报告——2018级2016第二学期第三周作业 A:[NOIP2002P]过河卒 题目: 描述 如图,A 点有一个过河卒,需要走到目标 B   点.卒行走规则:可以向下.或者向右.同时在棋盘上的任一点有一个对方的马(如上图的C点),该马所在的点和所有跳跃一步可达的点称为对方马的控制点.例 如上图 C  点上的马可以控制 9 个点(图中的P1,P2 … P8 和 C).卒不能通过对方马的控制点. 棋盘用坐标表示,A 点(0,0).B 点(n,m)(n,m 为不超过 20  的整数,并由键盘输入)

魏昊卿——《Linux内核分析》第三周作业:Linux系统启动过程

魏昊卿——<Linux内核分析>第三周作业:Linux系统启动过程 一.实验部分 实验指导 使用实验楼的虚拟机打开shell 1 cd LinuxKernel/ 2 qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img 内核启动完成后进入menu程序(<软件工程C编码实践篇>的课程项目),支持三个命令help.version和quit,您也可以添加更多的命令,对选修过<软件工程C编码实践篇>

第三周作业(一)VS安装及单元测试练习

第三周作业(一) 需求:练习教科书第22~25页单元测试练习,要求自行安装Visual Studio开发平台,版本至少在2010以上,要求把程序安装过程和练习过程写到博客上,越详细越好,要图文并茂,没有书的同学可以向班内助教同学借阅. 1.visual studio 开发平台安装 事实上我对Visual Studio了解不多,只知道支持的编程语言多,用的人也挺多,功能强大.至于到底好在哪里,还是要用上一阵自己体验一下才知道.听同学说VS2015有些卡,所以这里我选择了VS2013. 如图,具体版

2017-2018-2《网络攻防实践》第三周作业

第三周作业: 第一节:第三章学习: 1.1网络信息收集 网络信息收集的目的是尽可能了解目标,这包括目标的漏洞IP地址范围,外部网络阔朴结构等. 1.2网络信息收集方法 网络踩点: Web搜索与挖掘(Google Hacking,百度,雅虎) IP与DNS查询 1.3 网络拓扑侦察 tracert也被称为Windows路由跟踪实用程序,在命令提示符(cmd)中使用tracert命令可以用于确定IP数据包访问目标时所选择的路径.本文主要探讨了tracert命令的各个功能 1.3 网络扫描 网络踩点相

马哥2016全新Linux+Python高端运维班第三周作业作答

                    马哥2016全新Linux+Python高端运维班第三周作业                                           1.列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可.     [[email protected] ~]# who | awk '{print $1 $NF}'| uniq -d     [[email protected] ~]# who     yicx     :0  

【作业】第三周作业

从第三周开始,作业不再是是老师布置,因为这个时候,你们基本上都开始做项目了, 于是, 作业的来源: 1.书上的课后作业 2.课件上面的随堂讨论或作业 3.你瞎想到的问题 4.[推荐]在实际项目中,结合软件工程知识点,提出作业 最为推荐第四种方式,比如, 关于白盒测试的知识点,结合你的项目实践,就可以得出如下题目: 白盒测试有几种,请结合你的代码片段,一一举例说明,并给出测试用例. 作业的评分,还是10/5/0,三种,请参见: http://www.cnblogs.com/jerry1979/p/

三周学会小程序第二讲:客户端代码准备和基础功能讲解

通过上一讲大家已经申请了小程序了,这一讲我们主要讲解三部分,小程序开发工具使用,客户端代码准备,和基础的客户端讲解,并且运行第一预览版本. 本文不会带你从零搭建一个小程序,而是直接提供一个可预览版本.总结小编自己的编程经历,如果让你从基本类型,控制语句,for循环开始学 JAVA,那么可能几个月以后你才能真正动手做项目,所以我们按照"拿来主义",直接拿来就读,读懂就改,改完就上线.不过你不用担心这样学习的不彻底,因为开发过程中你已经融会贯通了. 代码准备 想必大家都用过Github吧,

软件工程_东师站_第三周作业

身体是革命的本钱,这话一点不假,白天昏沉,晚上发烧,一直不好,啥都干不动.   代码行数 博客字数 知识点 第一周 400 430 见我博客软件工程——师大站1 第二周 0 5200 见我博客软件工程_东师站_课堂笔记 第三周 0 63 站立会议.单元测试