请教这个条件,代码应该怎么改?(分不够可以加)

sjzglnpjwn 2006-05-05 01:02:32
原来是要求有人获得12个西瓜之后取消排序资格,不够12个西瓜的继续循环
可是现在又加了一个条件是:
要求有人获得12个西瓜之后取消排序资格,不够12个西瓜的继续循环,或者是有部分人获得7个西瓜之后取消排序资格,不够7个西瓜的继续循环
///////////////////////////////////////////////////////////

这里是题
第1个人上来本人获得2个西瓜
第2个人上来本人获得1个西瓜同时第1个人排在第2个人后面加一个西瓜总共的3个西瓜,
第3个人上来本人获得1个西瓜同时第2个人排在第3个人后面加一个西瓜共2个西瓜。
第4个人上来本人获得1个西瓜同时第1个人排在第4个人后面加一个西瓜共4个西瓜
第5个人上来本人获得1个西瓜同时第3个人平在第5个人后面加一个西瓜共2个西瓜
第6个人上来本人获得一个西瓜同时第2个人平在第6个人后面加一个西瓜共3个西瓜

要求有人获得12个西瓜之后取消排序资格,不够12个西瓜的继续循环

求来任何人时,前面某个人的排名及获得了几个西瓜
////////////下面是代码/////////////////////////////////////////////////////////


//下面的代码是计算第21人要来排队时,前面的20人的情况:
//你上面说求来任何人时,前面某个人的排名及获得了几个西瓜
//那么我就假设来第1001人时(这个还没有排上来,但第1000人已排完了),所以正的排队的人的排队位
//置及西瓜数,所有人都按其来的先后标为第X位.就算现在只有12人排队,但如其是第999人排队的人,
//他就叫"第999个排队的人"

int m[5000,3]
//m[1][1]为来到的先后顺序,m[1][2]为其现在排队位置,m[1][3]为其所得到的西瓜数
m[1,1]=1
m[1,2]=1
m[1,3]=2 //先得2个西瓜

int i,j=1
//这里打印显示第X人的当前的位置及西瓜数,
//例如要知道第7人要来排队时前面各人的情况就 i=2 to 6,
//要知道第1001个人要来排队时前面各人的情况就i=2 to 1000
for i=2 to 20 //注意此数不可太大,1000还是没问题的,太大数组m的一维也要加大,否则会越界
//新排队的人先得到一个西瓜,并排在最后
j++
m[j,1]=i
m[j,2]=j
m[j,3]=1
//然后最前面的人让出第一位改排在最后(其它人就要前移了)
m[j+1,3]=m[1,3]+1
if m[j+1,3]=12 then //达到12个取消排队资格,即清除它
m[j+1,3]=0
j --
else
m[j+1,1]=m[1,1]
m[j+1,2]=j+1
end if
int k,h
h=j+1
for k=2 to h
m[k -1,1]=m[k,1]
m[k -1,2]=k -1
m[k -1,3]=m[k,3]
if k=h then
m[k,1]=0
m[k,2]=0
m[k,3]=0
end if
next
next

int li_file
li_file=FileOpen("C:\do.txt",LineMode!,Write!,Shared!,Append!)
FileClose(li_file)
if FileDelete("C:\do.txt")=false then
messagebox("操作被取消","无法删除旧记录,请确认该文件是否正被打开! ")
return
end if
li_file=FileOpen("C:\do.txt",LineMode!,Write!,Shared!,Append!)
if li_file=0 then
messagebox("提示","无法打开文件,请重试操作!")
return
else
FileWrite(li_file,"~r~n"+"操作时间:"+String(today(),'yyyy/mm/dd hh:mm:ss'))
//先记下本次操作时间
end if
for i=1 to 5000
if m[i,1]>0 then
FileWrite(li_file,"~r"+"第["+string(m[i,1])+"]个排队的人,现在排在第["+string(m[i,2])+"]位,共有["+string(m[i,3])+"]个西瓜")
else
FileWrite(li_file,"~r~n"+"上面是第["+string(i)+"]个人想要来排队时(尚未排入时)各人的情况! ")
i=6000
Messagebox("计算完成","结果已输出到C:\do.txt,请确认查看该文件! ")
run("notepad.exe c:\do.txt")
end if
next
FileClose(li_file)
...全文
254 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ruky9988 2006-05-14
  • 打赏
  • 举报
回复
说实话,我没看懂题目
那位看懂了,给我明白的说说,有点兴趣,无奈呀无奈
TianChong 2006-05-14
  • 打赏
  • 举报
回复
有些不明白的是,是怎么样一个"有些人获得7个西瓜后取消排序资格"?难道是要随机抽取?如果是全部的话,那么是不会存在有人获得8-12个西瓜的.
TianChong 2006-05-14
  • 打赏
  • 举报
回复
倒这种小问题还用写一个类啊?就一个函数就能解决,为什么要复杂化?
TianChong 2006-05-14
  • 打赏
  • 举报
回复
应该都一样啊,我才看到题,你等等吧
  • 打赏
  • 举报
回复
mark
lzheng2001 2006-05-05
  • 打赏
  • 举报
回复
这种问题,楼主应该用面向对象的思想来解决比较好,光好多维数组,可读性比较差, 程序扩展性也不够好. 每个用用一个class来定义, 设置它的属性,比如: 排除的位置(Position),先后顺序,西瓜数目,最大的西瓜数目.
如果你不用class,也应该用structure来实现.
sjzglnpjwn 2006-05-05
  • 打赏
  • 举报
回复
不对呀,兄弟。你这样写
if m[j+1,3]=12 or m[j+1,3] = 7 then //达到12个或者7个取消排队资格,即清除它
就不可能出现12个西瓜了呀!!因为到了7就取消了排队资格!!

再说,我是要指定部分人获得7个西瓜之后取消排序资格,不够7个西瓜的继续循环
sjzglnpjwn 2006-05-05
  • 打赏
  • 举报
回复
WorldMobile 2006-05-05
  • 打赏
  • 举报
回复
不知道是不是你想表达的意思,你试试吧
WorldMobile 2006-05-05
  • 打赏
  • 举报
回复
在这个地方加一句m[j+1,3] = 7

if m[j+1,3]=12 or m[j+1,3] = 7 then //达到12个或者7个取消排队资格,即清除它
m[j+1,3]=0
j --
else
m[j+1,1]=m[1,1]
m[j+1,2]=j+1
end if
sjzglnpjwn 2006-05-05
  • 打赏
  • 举报
回复
lzheng2001(1加1)
您说的我不太明白,可以详细点吗?

743

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 脚本语言
社区管理员
  • 脚本语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧