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
认真想了一下,不用三个,两两相比取大的值,一开始 a
跟 b
比,大的设定成 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"
这句导致
卧槽...成功了...
网友评论