美文网首页
基础编程 7

基础编程 7

作者: RealAnalysis | 来源:发表于2020-05-08 22:29 被阅读0次

    Question 16

    欢迎勉强算全新的知识 Array ,目前的初印象是,计算机里的array是一列数列的感觉? 不像数学里是大型数组?也许我误解了...anyway 先把相关info看起来学起来

    看题目的初印象是,index要好好把握一下怎么写进代码,不然题目做不了哈哈哈

    嗯...教程提示第二行就打破我的初印象 是可以有数组的哈哈哈
    但是有反转 不是我熟悉的数组 而是array里的元素变成数列放进去 还是数列的既视感 index的体现要变成二维的 有趣

    啧啧啧 仔细想想 这样也算是我想象的数组了吧其实

    嗯 学到了array的简写 arr 啊,但是头疼要怎么表达最后一个的index跟第一个index的联动关系啊啊啊 要怎么写loop啊...

    尝试加array[j] = array.last去定义最后一个index 未果哈哈哈
    改成j = array.last.index这样自己想出来的文法 也未果哈哈哈

    改变思路 从最后一项开始“加一”两两对比,总算有数据被挑出来了 算进步

    但是结果是错的 需要再改

    i = 0 这个从第一项开始的思路改成 i = -1从最后一项开始比数据

    然后就成功找到88啦哈哈哈

    以防万一 测试了一下,在最后加一个最大数,依旧work. 但是...在中间加一个最大数...就崩坏了

    继续探索

    好像找到问题了

    问题就是 写的思路应该体现“两者对比 数值大的继续跟下一个再对比 比到最后一项停下” 而不是罗列两两相比的结果

    就算改成如下 给find_max一个确定的值也无果

    def find_max(array)
      i = -1
      
      while i >= -1
        if array[i] > array[i+1]
          a = array[i]
        else
          a = array[i+1]
        end
    
        i += 1
    
      end
    
      return a
    
    end
    
    arr = [8, 12, 36, 53, 9, 75, 3, 71, 59, 88]
    
    max = find_max(arr)
    puts "Max is #{max}"
    

    等等...不一定要用loop写啊...array有自己的全套数据跑下来的文法

    for 或者 .each两者一个作用啊啊啊!!!可以思考用这个文法!!!

    嗯...尝试了一下 连.each_with_index都用上了还是没办法...呜呜呜 继续loop大法好了...难过

    嗯 镇定,别毛躁,想想对比方法具体是“第一项跟第二项比较,留下一个, or ,再跟第三项对比”这要如何抽象成数字表达,重点是如何表述“留下最大的继续跟其他项比较”

    这样的写法就“没循环起来” 观察到数值只限制在first second last这三个数据间比较...头疼...why无法循环起来 明明加了 i += 1

    认真想了一下,不用三个,两两相比取大的值,一开始 ab比,大的设定成 maxnumb然后 i += 1执行后,maxnumb 只要再跟 b比较即可 嗯,这个思路估计可以

    按照“两两比较 大的设定成max继续跟下一个比”的思路写了几版 都无法准确执行 然后一气之下...

    虽然能正确运作了...但是不能这样啊啊啊

    继续探索吧 思路应该是对的

    嗯 其实不用把index设置成-1 index为 0的时候就是第一项 可以从第一项开始的...

    所以如何让x是个“留下更大值”再继续比较 而不是i一变就跟着变...

    嗯 run了一些 感觉问题出在return x这句上...一旦满足条件然后执行了这句 就中止了。所以这句是结论代码吗?自动中止功能?!

    尝试了多种自己想出来的“保持原值”的写法 最后找了Google出来的Java语言的视频,得到了灵感,一下子写出来了

    所谓的保持原值,不就是什么都不做,什么都不做的话,就压根别写了就好了,谁规定了if条件句必须有个else的部分啊!!只写需要改变的那部分就好了!!!砍掉“保持原值”的部分 一下子就搞定了!!妈呀真的太不容易了!!

    def find_max(array)
      i = 0
      x = array[0]
    
      while i < array.length
        if x <= array[i]
          x = array[i]
        end
        i += 1
      end
    
      return x
    
    end
    
    arr = [8, 12, 36, 53, 9, 75, 3, 71, 59, 88]
    
    max = find_max(arr)
    puts "Max is #{max}"
    

    其中定要写if x <= array[i]就是必须有“=”等号 不然的话就无法用array[i]上阵了...用array[i+1]要报错的

    不然

    或者继续改

    Question 17

    前一题思路对了 这里就类似了

    但果然还是遇到问题了

    尝试改了两处


    还是报错

    这个private method报错要如何搞定啊...

    简单粗暴的搞定了

    Question 18

    此处的index就用 i += 1的方法来表达 而且我第一次写还多搞了一行 arr[i] = i * i写成如下样式

    Question 19

    本来以为很简单的...

    结果这样写整排都会显示出来

    在思考是否因为array << i导致全部的i都被丢进去了?!!

    为了找出原因 开始一行行代码排查 后来干脆删掉一片

    居然还是...

    所以显示全部arr的数据 不是array << i这行导致的 而是arr.each do导致的!!!妈耶...

    认真想一想,这样写其实只是执行两个条件其一而已...是 or 的关系,其实我要写的是 and 的关系,所以这样书写肯定不对...而且再认真想想,0/2也等于 0所以肯定也是偶数啊,我直接合并两者即可,不用特定的把 0的情况分开写啊...

    然后再添加一个varx,让它等于 i/2的值, 再用x的数值来写条件, 改成这样估计能成

    为了找到原因 我加了一句 想找到问题所在

    结果是这样的

    对比了一下 感觉错误在 var挑错了哈哈哈

    最后不信邪 改了一下

    Question 21

    一开始还疑惑要怎么switch position后来看到了 rotate!这个写法可以位置互换啊哈哈哈!!!看文档很重要啊哈哈哈

    嗯 然后用嵌套while条件来实现吗?

    嗯 有点头疼,拆分开来一个个步骤写吧,先写一个最小值如何找

    等等,互相交互数值...这不是Question 2里面的思路吗?!

    估计要再嵌套一个while的条件就能自动循环下去

    我在想,是否以为i已经循环到arr.size的数值导致的吖?

    真的解决了...妈耶...

    Question 22

    思路就是 把完整的array array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]给定义出来,然后从中挑出arr中存在的数值,不就搞定了...这样想的话,这题就是考验要怎么写delete

    这样写的话,没有变化,估计又是因为漏掉了puts "output"这句导致

    卧槽...成功了...

    相关文章

      网友评论

          本文标题:基础编程 7

          本文链接:https://www.haomeiwen.com/subject/eadowhtx.html