大神,救救孩子吧5人相约去湖里捕鱼。-直捕到晚上,捕了一大堆
vb吧
全部回复
仅看楼主
level 3
大神,救救孩子吧
5人相约去湖里捕鱼。-直捕到晚上,捕了一大堆鱼,遂决定露宿湖边到第二天天亮分鱼。夜里,有一人先醒来,把鱼平分成5份,发现多-条,就把多的这一条鱼扔进了水里,趁着天黑带着-份鱼走了,临走之前把剩下的4堆又重新堆成一堆。以此类推,直到最后一人醒来都做法如上,问每个人醒来时面前的鱼数各是多少?利用数组编程完成,代码和运行结果拍照发回(提示:采用倒推法)
这题目怎么解啊[狂汗][狂汗][狂汗][狂汗]
2020年04月23日 14点04分 1
level 3
2020年04月23日 14点04分 2
就是个数列的问题,所有的数列(等差、等比以及其他复杂数列)都是用循环类解决。另外,弄不了不要紧,哪怕是错误的思路,也要自己先想过。吧自己的思路跟自己认为不合适的地方说出来,别人才好帮你
2020年04月24日 01点04分
level 15
本来想说这种题目根本用不到数组的,结果再仔细一看题目……似乎还确实有点难度
那么先找一下思路吧,假设每个人拿到的鱼数量依次为a(1)~a(5),则第i个人面前的鱼数量则为a(i)*5+1,而前后两个人拿到的鱼的数量有如下关系:第i个人拿走自己的a(i)条鱼之后,留给后面的人的鱼有a(i)*4条,即a(i)*4=a(i+1)*5+1
建立起这个关系,我们就可以从后往前逐步倒推出所要求的结果了:先让a(5)从1开始,逐步递增,用关系式依次计算出前面的数据,如果计算到某一步发现不可行(比如1*5+1=6,就不是4的倍数,a(5)=1是计算不出a(4)的),就让a(5)加1,重新尝试计算,直到计算出一个全部可行的结果为止
参考代码:
dim a(1 to 5) as integer
dim i as integer,n as integer
do
a(5)=a(5)+1
for i=5 to 2 step -1
n=a(i)*5+1
if n mod 4<>0 then exit for
a(i-1)=n\4
next i
loop until i=1
for i=1 to 5
?a(i)*5+1;
next i
2020年04月24日 01点04分 3
level 3
@璐村惂鐢ㄦ埛_0748V5Z馃惥 大神,你帮我看一下这个对不对,[泪]
2020年04月24日 03点04分 4
你这不是做出来了么……另外你是不是不喜欢在Do和Loop后面写条件,为什么要用Exit Do来退出循环呢
2020年04月24日 04点04分
@初音✨七奈 [泪]我这是翻书加问人,磨了一晚上做出来的,这个类型的题目我们老师还没有教,他总是喜欢布置一些没有学过的作业,有些地方我自己都不是很懂[喝酒]
2020年04月24日 05点04分
@初音✨七奈 我觉得vb好难啊……
2020年04月24日 05点04分
VB好象入门最快的工具,而且你的题目只是算法问题,慢慢会习惯的。相信你
2020年04月24日 05点04分
level 11
对于你四楼的代码,我的看法是
一、是否正确,第一准则是能否实现你的设计目标。这个运行一下就知道了。
二、有些do……loop的细节,如米库大侠所说:正常的有两种,一种是条件写在do这一行,另一种是条件写在loop这一行。特殊情况,也可以把exit作为主要出口。1、条件写在do这一行,先检查条件,不符合就不进入。条件写在loop这行,至少执行一次,每次执行后检查条件。2、条件又有二种常用格式,直到(until)和当(while),两者正好相反。until是循环直到达成条件才结束;while是条件成立才循环。
三、书写代码,用键盘上的tab键,分层次输入。例如for和它的next对齐,它里面的语句组缩进一个层次。do和对应的loop对齐,里面的数据组说近一个层次。if和else和endif对齐,它的各组执行语句也缩进一个层次。
2020年04月24日 09点04分 5
第三点,对运行没有影响,但对阅读影响很大。
2020年04月24日 09点04分
level 11
具体这道题,我认为:
第一缺少一个条件。正常的题目是有一个已知:第二天早上还有多少鱼,或者第二天早上5人分鱼的结果。没有这个条件,就有无穷多的答案,即不定解。
第二,从编程的解读看,没有必要用数组。
2020年04月24日 09点04分 6
level 11
读了一下,程序的计算上,应该没有问题。
但仍然说明一下,这是最小的一组值,不是唯一的一组。
2020年04月24日 10点04分 7
老同志说的对。只是觉得不能与出卷的人较真,能拿分数才是真的。有时候要将错就错,领会出卷人的目的。我又乱说话了~
2020年04月24日 11点04分
@tttgcxh 标准答案为王呀。跟他不一直就不得分。不过我已经N年不考试了,也不在乎分数了,呵呵呵
2020年04月24日 13点04分
level 1
miku_con 给了我意路,很精简,我在他的基础上,再精简一句。
Private Sub Command1_Click()
Dim a(1 To 5) As Integer
Dim i As Integer, n As Integer
Xuen:
a(5) = a(5) + 1
For i = 5 To 2 Step -1
n = a(i) * 5 + 1
If n Mod 4 <> 0 Then GoTo Xuen '如果不能被4整除
a(i - 1) = n \ 4
Next i
For i = 1 To 5
Print a(i) * 5 + 1;
Next i
End Sub
2020年04月24日 11点04分 8
GoTo啊……现在很多人都忌讳用这个的[滑稽]
2020年04月24日 12点04分
@初音✨七奈 哦,我自学的,网上也有人说忌讳。不过说真的,老是在纠结这问题,后来想来想去,能用就行呵,
2020年04月24日 12点04分
呵呵,在您的基础上,少打一行字,多好。我们不去忌讳它,世界要创新。
2020年04月24日 12点04分
@tttgcxh 创新?然而我说用GoTo是时代的倒退你信么[滑稽]
2020年04月24日 13点04分
level 11
这个题目就没有唯一答案,跟最后一个人分到的条数有关,假设最后一个人分到n条,那么第四个分之前的数量一定是2*(n+1)+1,第三个一定是3*(2*(n+1)+1)+1,第二个一定是4*(3*(2*(n+1))+1)+1类推也就是上一个是下一个+1乘2倍再加1,从这里来看答案应该有无数个
dim ren(5)
ren(5)=inputbox("请输入第五个人分到的鱼的数量")
for i=4 to 1 step -1
ren(i)=(6-i)*(ren(i+1)+1)+1
next i
2020年04月25日 01点04分 12
你对题目的理解好像有点问题,每个人分鱼之前并没有看还有多少人(因为都是半夜醒的),而是想当然地以为5个人都在,所以每个人都是分了5份(也就是说最后一个人走了之后,现场仍然剩下了一大堆鱼……)[滑稽]
2020年04月25日 01点04分
不过“这个题目没有唯一答案”这一点应该是对的
2020年04月25日 01点04分
level 11
上面那个按照人数来分的,确实是没读清楚题目,这样的话把上面的第五个人分到的鱼改成最后剩的鱼的条数,那么第五个分之前就是5*(n+1)+1,第四个就是5*(5*(n+1)+1)+1类推就是上一个是下一个的五倍多一条
dim ren(5)
dim sheng
sheng=inputbox("请输入第五个人分后剩余的条数")
ren(5)=5*sheng+1
for i=4 to 1 setp -1
ren(i)=5*(ren(i+1)+1)+1
next i
2020年04月25日 02点04分 15
level 1
n=int(input())
a=1
m=[]
for i in range(n):
m.append(a)
a=a*n
a=a+1
print(a)
print(m[0])
2021年11月27日 01点11分 16
1