一道Vb程序设计竞赛的练习题目,求高人指点

题目如下:100可以表示为带分数的形式:100=3+69258/714还可以表示为:100=82+3546/197注意特征:带分数中数字1~~~~9分别只出现一次(不包括... 题目如下:
100可以表示为带分数的形式:100=3+69258/714
还可以表示为:100=82+3546/197
注意特征:带分数中数字1~~~~9分别只出现一次(不包括0),类似的带分数,100有11种表示方法。
题目要求:
从标准输入一个正整数N(N<1000*1000),程序输出读数用数码1~~~~9不重复不遗漏地组成带分数表示的全部种数
注意:不要求输出每个表示,只统计有多少表示法,例如,程序运行时要求输入100,程序在屏幕上输出11!
展开
 我来答
syx54
2013-11-06 · TA获得超过7376个赞
知道大有可为答主
回答量:6567
采纳率:83%
帮助的人:2651万
展开全部
高人不敢当:
添加一个文本框和一个按钮,文本框输入N值
Option Explicit

Private Sub Command1_Click()
Dim i As Long
Dim j As Long
Dim m As Long
Dim W As Integer
Dim N As Long
Dim G As Integer
Command1.Enabled = False
G = 0
N = Val(Text1.Text)
For i = 1 To N - 1
j = 2
m = j * (N - i)
W = Len(CStr(i)) + Len(CStr(j)) + Len(CStr(m))
Do While W <= 9
If W = 9 Then
'i是整数部分,j是分子,m是分母
If Jug(i, j, m) Then G = G + 1: Debug.Print i, j, m
End If
j = j + 1
m = j * (N - i)
W = Len(CStr(i)) + Len(CStr(j)) + Len(CStr(m))
Loop
Next i
Print G
Command1.Enabled = True
End Sub

'判断是否满足条件--ii是整数部分,ji是分子,mm是分母
Private Function Jug(ByVal ii As Long, ByVal jj As Long, ByVal mm As Long) As Boolean
Dim Lins As String
Dim d(1 To 9) As Integer
Dim i As Integer
Dim j As Integer
Dim T As Integer
Lins = CStr(ii) & CStr(jj) & CStr(mm)
For i = 1 To 9
d(i) = Val(Mid(Lins, i, 1))
Next i
For i = 1 To 8
For j = i + 1 To 9
If d(i) > d(j) Then
T = d(i)
d(i) = d(j)
d(j) = T
End If
Next j
Next i
Lins = ""
For i = 1 To 9
Lins = Lins & CStr(d(i))
Next i
If Lins = "123456789" Then
Jug = True
Else
Jug = False
End If
End Function
追问
非常感谢您的回答,但是我还是没有调试出来,我输入100的时候,答案是0,输入任何数都是0,请问我是问题出在哪了?
追答

通常我在这里回答的问题,都会在自己的计算机里通过测试。

我把我的工程文件发给你吧!

而且应该满足题目的要求,输入的值可以在小于1000000的范围。

补充说明:

根据题目要求,不要输出:

可以把

If Jug(i, j, m) Then G = G + 1: Debug.Print i, j, m

改成

If Jug(i, j, m) Then G = G + 1

其中,Debug.Print i, j, m是输出在立即窗口,检查结果用的。放着也行。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式