谁能把它转换成另外一种语言?

whalefish2001 2004-04-17 07:10:07
Dim hf(55, 55) As Integer
Dim zz(2502), stopp As Boolean
Dim hfzhi As Long
Dim geshu As Long
Dim huanfangjs, hfsj As Integer '幻方阶数 幻方数据
Private Sub Command1_Click()
Timer1.Interval = 56

geshu = 0
stopp = False
Command1.Visible = False
hfsj = huanfangjs * huanfangjs
hfzhi = Int(huanfangjs * (hfsj + 1) / 2)
For temp = 1 To 2502 ' 幻方可填入的数据 (1 to 2500) 初始化
zz(temp) = True 'true为未用过
Next
For w = 1 To huanfangjs
For ww = 1 To huanfangjs
hf(w, ww) = 0
Next
Next

Call huanfang
End Sub

Private Sub Command2_Click()
Timer1.Interval = 0
stopp = True
End Sub

Private Sub Form_Load()
Picture1.AutoRedraw = True
End Sub

Private Sub Text1_Change()
huanfangjs = Val(Text1.Text)
Command1.Visible = True
End Sub
Public Sub huanfang()

Call dg(1, 1, True) 'hang
Timer1.Interval = 0
End Sub

Public Sub dg(c As Integer, d As Integer, e As Boolean) 'e: true:hang, false:lie
If e = True Then
total = 0
For w = 1 To d - 1
total = total + hf(c, w)
Next
If total + (2 * hfsj - huanfangjs + d) * (huanfangjs - d + 1) / 2 < hfzhi Then GoTo endsub
If d <> huanfangjs Then bb = hfzhi - total - (2 * hfsj - huanfangjs + d + 1) * (huanfangjs - d) / 2

Else
total = 0
For w = 1 To c - 1
total = total + hf(w, d)
Next
If total + (2 * hfsj - huanfangjs + c) * (huanfangjs - c + 1) / 2 < hfzhi Then zz(b) = True: hf(c, d) = 0: GoTo endsub
If c <> huanfangjs Then bb = hfzhi - total - (2 * hfsj - huanfangjs + c + 1) * (huanfangjs - c) / 2

End If

If bb <= 1 Then bb = 1


For b = bb To hfsj
startdg:
If b = 1 Then
teee = Int(huanfangjs / 2 + 0.5)
If c > teee And d > teee And zz(1) = True Then GoTo endsub
If d > teee And zz(1) = True Then GoTo nextb
If c > teee And zz(1) = True Then GoTo nextb
End If

If b = 2 Then
If c > d And zz(2) = True Then
GoTo nextb
End If
End If

If zz(b) = False Then GoTo nextb
hf(c, d) = b
zz(b) = False



If e = False Then GoTo ccc

total = 0
For w = 1 To d
total = total + hf(c, w)
Next
If total > hfzhi Then zz(b) = True: hf(c, d) = 0: GoTo endsub

If d = huanfangjs Then
total = 0
For w = 1 To huanfangjs
total = total + hf(c, w)
Next

If total <> hfzhi Then
zz(b) = True
GoTo nextb
Else
If c <> huanfangjs Then
Call dg((c + 1), (c), False)
zz(b) = True
Else
GoTo hf_finished
End If
End If 'd的 total = hfzhi 判断结束

Else
Call dg((c), (d + 1), (e))
zz(b) = True
End If

GoTo nextb

ccc:
total = 0
For w = 1 To c
total = total + hf(w, d)
Next
If total > hfzhi Then zz(b) = True: hf(c, d) = 0: GoTo endsub

If c = huanfangjs Then '如果幻方已经到最后一行
totall = 0
For ww = 1 To huanfangjs
totall = totall + hf(ww, d)
Next
If totall <> hfzhi Then
zz(b) = True
GoTo nextb
Else
If d <> huanfangjs Then
Call dg((d + 1), (d + 1), True)
zz(b) = True
Else
GoTo hf_finished
End If

End If
Else
Call dg((c + 1), (d), (e))
zz(b) = True
End If '结束 c=huanfangjs

GoTo nextb

hf_finished:
If c = huanfangjs And d = huanfangjs Then
totall = 0
For w = 1 To huanfangjs
totall = totall + hf(w, w)
Next
If totall <> hfzhi Then
zz(b) = True
GoTo nextb
End If

totall = 0
For w = 1 To huanfangjs
totall = totall + hf(w, huanfangjs - w + 1)
Next
If totall <> hfzhi Then
zz(b) = True

GoTo nextb
End If
geshu = geshu + 1
Picture1.Cls
Open "幻方.txt" For Append As #1
Print #1, "以下是第" + Str(geshu) + "个" + Str(huanfangjs) + "阶幻方"
Picture1.Print "以下是第" + Str(geshu) + "个" + Str(huanfangjs) + "阶幻方"

For w = 1 To huanfangjs
hfprint = " "
For ww = 1 To huanfangjs
hfprint = hfprint + Str(hf(w, ww)) + " "
Next
Print #1, hfprint
Picture1.Print
Picture1.Print hfprint
Next
Close #1

'赶快打印出来吧,叫大家看看啊!
zz(b) = True
End If



nextb:
Next
endsub:

End Sub

Private Sub hoho()
hhh = ""
For w = 1 To huanfangjs
For ww = 1 To huanfangjs
hhh = hhh + Str(hf(w, ww)) + " "
Next
hhh = hhh + " | "
Next
Label2.Caption = hhh
End Sub

Private Sub Timer1_Timer()
Dim w, ww As Integer
Dim hfprint As String
Picture2.Cls
For w = 1 To huanfangjs
hfprint = " "
For ww = 1 To huanfangjs
hfprint = hfprint + Str(hf(w, ww)) + " "
Next
Picture2.Print
Picture2.Print hfprint
Next
End Sub

这个是我2年前在我上大三的时候写的程序,现在没有时间看了。不过,我真的想看看所有的n阶幻方的样子,这个就能输出n阶的所有幻方。
具体控件大家在读程序的时候自行加进去。


谁能把这个vb程序转换成运行起来速度更快的其他语言呢?
并能不能给我找个更好的算法?我要能运行起来的源代码,不要方法(也就是说,不只要中间的核心代码,要能Ctrl + C 和 Ctrl + V 能运行起来的程序,并且要求运行起来的时间最短。
代码的思路请大家自行分析。

我的要求只有1点,运行起来最快(在windows2000或windows XP 下)
我会拿4阶幻方做测试
大家必要的时候,可以考虑并行算法(不过我个人认为可能没有这个必要吧,关键是不好控制)
改进算法是最重要的。
...全文
74 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
kgha 2004-06-10
  • 打赏
  • 举报
回复
有空看看吧
whalefish2001 2004-04-29
  • 打赏
  • 举报
回复
再次顶一下
whalefish2001 2004-04-28
  • 打赏
  • 举报
回复
真的没人了吗?
本人再顶一下
whalefish2001 2004-04-24
  • 打赏
  • 举报
回复
已经没有问题了。
不过,哪个写的和我写的不是一个意思。他的程序运行结果是我的程序运行结果之中的一个元素

形象点说,也就是茫茫大海中的一滴小水滴而已。

不过,我用的是穷举的方法。虽然有些地方用了写小技巧,但是总体上 感觉不是很爽。

希望有人能把这个翻译成C/C++语言的形式。
并改进些算法。

iintsy 2004-04-23
  • 打赏
  • 举报
回复
感觉程序太长阿,有空的话还可以看看
iintsy 2004-04-23
  • 打赏
  • 举报
回复
我试了没有你说的那种编译问题啊,没问题啊
whalefish2001 2004-04-23
  • 打赏
  • 举报
回复
真的没有人来了了?
如果真没有人来的话,
下午我把这个帖子转到数据结构里去看看。

whalefish2001 2004-04-22
  • 打赏
  • 举报
回复
怎么没有人来了?

本人再顶。
whale2000 2004-04-21
  • 打赏
  • 举报
回复
whalefish2001 2004-04-21
  • 打赏
  • 举报
回复
删除 list<int>::iterator
并在第一个用到 list<int>::iterator 的地方之前写上 list<int>::iterator itrj;

错误提示信息是:redefinition (重复定义)
只需要定义一次即可。
不过他没有解答我的问题。很抱歉,(此问题还不能结贴)
这个程序的输出只有1个幻方(奇数阶的算法好像不是我们大家熟知的那种算法)



eliner 2004-04-21
  • 打赏
  • 举报
回复
太长
没有耐心看
帮你顶一下
whalefish2001 2004-04-21
  • 打赏
  • 举报
回复
本人再顶
怎么没人了呀?
whalefish2001 2004-04-20
  • 打赏
  • 举报
回复
问题解决了,但是怎么只出来一个呀?
我要的是全部的输入的N阶幻方。
不是只出来一个。

你们拷贝我的程序做做看看,不是只出来一个的。
基本上能出来的都出来了。
出来一个幻方的有方法。这个我知道,但是全部的方法我就不知道了。
上面是我想出来的方法,自我感觉有些笨,并还有些错误,由于用的是VB实现的,运行起来有些慢,所以,希望大家能够找到更好的方法,或者给我改写一下,并转成C或C++程序。

whalefish2001 2004-04-20
  • 打赏
  • 举报
回复
上面的程序拷贝下来了,但是

D:\自己的测试程序\幻方\幻方.cpp(134) : error C2086: 'itrj' : redefinition
Error executing cl.exe.

如何修改?
能否告知?

whalefish2001 2004-04-20
  • 打赏
  • 举报
回复
我在vc6下编译,
选用的是 Files-->c++ Source File
出现如下错误。
D:\自己的测试程序\幻方\幻方.cpp(134) : error C2086: 'itrj' : redefinition

如何修改?
iwdc 2004-04-20
  • 打赏
  • 举报
回复
上面的程序拷贝下来了,但是

D:\自己的测试程序\幻方\幻方.cpp(134) : error C2086: 'itrj' : redefinition
Error executing cl.exe.

如何修改?
能否告知?
怎么改的,楼主能否告知????????
whale2000 2004-04-20
  • 打赏
  • 举报
回复
顶一下。
whalefish2001 2004-04-19
  • 打赏
  • 举报
回复
这个是vb6的代码,基本上没有用到那么多的功能。

我是想有人把这个代码给转成运行起来比较快的 c#,vc++ 或者其他的代码。
但是只有一个要求,就是运行起来要比较块一些。

我要是贴到vb里面去,有些不合适。大家不会看不懂vb的代码吧。

另外,还有一些小错误,就是没有把所有的都列举出来,另外还有重复的现象(换行,颠倒,旋转都叫重复),希望高手们能给我除去。

zhouqingyuan 2004-04-19
  • 打赏
  • 举报
回复
100阶,也是毫秒级别的,
主要耗时还是在打印上面。
whalefish2001 2004-04-19
  • 打赏
  • 举报
回复
我就想问问,生成5阶的所有275305224用了多长时间啊?


100阶的?
真的吗?那要多少个呀?
估计是不是要超过10的100次幂个?
加载更多回复(5)

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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