第三周续(读代码)

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

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

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

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

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

(注:该程序、用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);
        }
      }
    }
  }
我个人理解代码时是当有循环时逐步记录一下个变量的值,这样能更方便计算结果。

但是这个代码的循环次数有点多,这就要求我们通过几次的循环找到规律,然后再继续判断。

首先,第一次循环

i=1时,

{          j=0, rg[0]=2,hit=1,hit1=0,hit2=-1,此时还可以再循环

so   j=1, rg[1]=3,hit=2,hit1=0,hit2=1,    hit<=2 满足,还可以循环

j=2 , rg[2]=4,hit=3,hit1=0,hit2=1,  结束循环

但是在下方比较判断条件时时,hit!=2.

}

接下来继续外部大循环

i=2时,

{

j=0,rg[0]=2,hit=0,hit1=-1,hit2=-1

j=1,rg[1]=3,hit=1,hit1=1,hit2=-1

j=2,rg[2]=4,hit=2,hit1=1,hit2=2

j=3,rg[3]=5,hit=3,hit1=1,hit2=2  结束

可以看出判断条件 依然  hit!=2

}

当记录到这里就应该想想从判断条件入手想问题了,我们根据上方for (int j = 0; (j < rg.Length) && (hit <=2) ; j++)这句可以看出,循环结束的条件时读完数组或hit<=2,  而这句if ((hit == 2)&& (hit1+1==hit2)) 则是说明在上方数组的所有存有的数中找到两个连续的数,i 不能被 2~31 中相邻的这两个数整除,但可以被其余28个数整除。

1,这个程序是要在-263到263之间的整数找到一个数,不能被 2~31 中相邻的这两个数整除,但可以被其余28个数整除。

2,额 这个数我是真不知道,不过问了其他同学说是16,17与其它28个数的最小公倍数。是23*33*52*7*11*13*19*23*29*31=2123581660200

3,这个问题粗略的算需要计算外层的循环次数*循环一次的时间,2^63 = 9.2233720368548 * 10 18,

但是我并不知道循环一次所需的时间,百度一下说执行一亿次简单的循环对确定机器周期为12M晶振的计算机来说是1S,所以结果为90亿秒,9000000000/3600=2500000 days

4,我认为应该尽可能的关闭其他进程,保证该程序的正常运行吧。

时间: 2024-10-06 00:08:59

第三周续(读代码)的相关文章

第二周续.(代码)

#include "stdafx.h" #include<stdio.h> #include<stdlib.h> #include<string.h> #include<time.h> #include <math.h> void jiaf(); void jianf(); void cf(); void chuf(); void gj(); int i; void main() { int choose; while(1)

20172328《程序设计与数据结构》第三周学习总结

20172328李馨雨<程序设计与数据结构>第三周学习总结 教材学习内容总结 1.学习使用new运算符建立对象(即实例化),了解null空引用.具体体悟 :类和对象的关系. 2.对象引用变量的声明和初始化.用"."来引用方法,并且需要保留(). 3.了解String类的一些基本方法和标准类库java API. 4.除了在java.lang中的变量无需import声明,其他都需要import声明(简化类的多次引用). 5.了解和使用Random类和Math类. 6.理解格式化

第三周学习总结

20145336第三周JAVA实验报告 20145336 <Java程序设计>第三次实验实验报告 北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1453 姓名:张子扬 指导教师:娄嘉鹏 实验日期:2016.04.22 实验名称:Java开发环境的熟悉(Linux + Eclipse) 实验内容: XP基础 XP核心实践 相关工具 实验目的与要求: 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程 完成实验.撰

张季跃 201771010139《面向对象程序设计(java)》第三周学习总结(改)

张季跃 201771010139<面向对象程序设计(java)>第三周学习总结 第一部分:理论知识学习部分 3.6字符串 u(1)Java字符串是Unicode字符的序列,它是组织字符的基 本数据结构,用法类似于字符数组. u (2)有内置的字符串类型,而是在标准Java类库中提供了一 个Java预定义类String.在Java中,字符串被当作对象 来处理. u      (3)程序中需要用到的字符串可以分为两大类: –创建之后不会再做修改和变动的不可变字符串String类: –创建之后允许再

杨其菊201771010134《面向对象程序设计(Java)》第三周学习总结

<面向对象程序设计(Java)>第三周学习总结 第一部分:理论知识 这周课程没有新进度,由于感觉对基础语法的不熟悉,复习了一遍前三章的细碎知识,学到一些之前不知道的原理: 1.计算机高级语言按程序的方式可以分为两种:编译型和解释型 编译型:C,C++,Objective-C,Pascal等: 解释型:Ruby,Python, 半编译型:Visual Basic, java:既是编译型语言又是解释型语言. 2.classpath 环境变量的设置:如果使用1.5以上的版本,完全可以不用设置这个环境

2018-2019-1 20165228 《信息安全系统设计基础》第三周学习总结

2018-2019-1 20165228 <信息安全系统设计基础>第三周学习总结 教材学习内容总结 程序的机器级表示: 计算机系统的两种重要抽象 ISA(Instruction set architecture):指令集体系结构,机器级程序的格式和行为.定义了处理器状态指令的格式,以及每条指令对状态的影响. 机器级程序使用的存储器地址是虚拟地址,提供的存储器模型看上去是一个非常大的字节数组.存储器系统实际表现是将多个硬件存储器和操作系统软件组合起来. 汇编代码及其特点 直接面向处理器的程序设计

2019-2020-1 20175313 《信息安全系统设计基础》第三周学习总结

目录 一.教材学习内容总结 二.教材学习中的问题和解决过程 三.心得体会 四.学习进度条 五.参考资料 一.教材学习内容总结 数据类型 注意:汇编代码也使用"l"来表示4字节整数和8字节双精度浮点数.这不会产生歧义,因为浮点数使用的是一组完全不同的指令和寄存器. 操作数 操作数可分为三种类型: 1. 立即数 2. 寄存器 3. 内存引用 操作指示符 过程 P调用Q: call Q该指令会把P中call Q的下一条指令的地址A压入栈中,并把程序计数器设置为Q的代码的起始位置. retq该

2019-2020 191316《信息安全专业导论》第三周学习总结

2019-2020 191316<信息安全专业导论>第三周学习总结 教材学习内容总结 阅读课本第二三章,我了解了数字的分类和位置计数法,学会了如何在不同进制直接对数字进行转换和计算补码.知道了为什么计算机要采用二进制.了解了文本压缩的三种方法,颜色表示法和视频表示法. 教材学习中的问题和解决过程 问题一:我阅读了关于数据压缩技术的有关文字,没有明白既然有损压缩会丢失数据,为什么有时还会采用这种方法. 解决方案:我上网查了有关资料,知道了有损与无损的区别以及各自的优缺点. 有损压缩 有损压缩的特

第三周活动进度

学习进度表:   第三周内容 时间 周一(4:10-6:00)上课,周二晚上(8:00-9:00),周四晚上(8:00-8:30),周四下午(4:10-6:00)javaweb课程 代码行数 200行 发博客量 3篇 了解到的知识 随机数的产生,四则运算的开发思路(分解),简单的数据库创建表. 周活动详细记录表: 日期/内容 写代码 上网查方法 上课 看书(构建执法) 3.6 2小时(150行)大概完成   2小时   3.7   查询缺失功能的方法   1小时 3.8         3.9