爱问知识人 爱问教育 医院库

一个算法问题求解?

首页

一个算法问题求解?

大家只需给一个思路就行了啦  不能太模糊了啦,在清楚点
从0到9的数字组成一道一位数加两位数加三位数得四位数的算式不得重复数字

提交回答
好评回答
  • 2006-01-18 16:11:29
        分析:由数学知识不难分析出,要使等式成立,def应代表尽可能大的三位数,ghij应代表尽可能小的四位数,因此必有d=9,g=1,h=0。a,b,c,e,f,i,j的值只能在2~8这7个数字中选取.我们可以用多重循环来列举出它们各种不同的取值情况,逐一地判断它们是否满足上述等式。
      为了避免同一数字被重复使用,可设立逻辑数组x,x[i]值为True时表示数i没有被使用。 Private Sub cmdShow_Click() Dim a, b, c, d, e, f, g, i, j, h, u, v, n As Integer Dim str1 As String Dim x(1 To 9) As Boolean n = 0 For i = 1 To 9 x(i) = True Next Text1。
      Text = "" g = 1: h = 0: d = 9 For a = 2 To 8 x(a) = False For b = 2 To 8 If x(b) Then x(b) = False For c = 2 To 8 If x(c) Then x(c) = False For e = 2 To 8 If x(e) Then x(e) = False For f = 2 To 8 If x(f) Then x(f) = False For i = 2 To 8 If x(i) Then x(i) = False For j = 2 To 8 If x(j) Then u = a + c + f + (b + e) * 10 + 900 v = 1000 + i * 10 + j If u = v Then str1 = Trim(Str(a)) + "+" + Trim(Str(b)) + _ Trim(Str(c)) + "+" + Trim(Str(d)) + Trim(Str(e)) + _ Trim(Str(f)) + "=" + Trim(Str(g)) + _ Trim(Str(h)) + Trim(Str(i)) + Trim(Str(j)) If n = 0 Then Text1。
      Text = str1 ElseIf n Mod 3 = 0 Then Text1。Text = Text1。Text + Chr(13) + Chr(10) + str1 Else Text1。
      Text = Text1。Text + Chr(13) + " " + str1 End If n = n + 1 End If End If Next x(i) = True End If Next x(f) = True End If Next x(e) = True End If Next x(c) = True End If Next x(b) = True End If Next x(a) = True Next Label1。
      Caption = "解的个数:" + Trim(Str(n)) End Sub 。

    1***

    2006-01-18 16:11:29

其他答案

    2006-01-11 17:36:58
  •   用C写(只写必要部份):
    for(a=1;a<10;a++)
      for(b=1;b<10;b++)
        if(b!=a)
          for(c=0;c<10;c++)
            if(c!=a&&c!=b)  
              for(d=1;d<10;d++)
                if(d!=a&&d!=b&&d!=c)      
                  for(e=0;e<10;e++)
                    if(e!=a&&e!=b&&e!=c&&e!=d)
                      for(f=0;f<10;f++)
                        if(f!=a&&f!=b&&f!=c&&f!=d&&f!=e)
                          for(g=1;g<10;g++)
                            if(g!=a&&g!=b&&g!=c&&g!=d&&g!=e&&g!=f)
                              for(h=0;h<10;h++)
                                if(h!=a&&h!=b&&h!=c&&h!=d&&h!=e&&h!=f&&h!=g)
                                  for(i=0;i<10;i++)
                                    if(i!=a&&i!=b&&i!=c&&i!=d&&i!=e&&i!=f&&i!=g&&i!=h)
                                      for(j=0;j<10;j++)
                                        if(j!=a&&j!=b&&j!=c&&j!=d&&j!=e&&j!=f&&j!=g&&j!=h&&j!=i)
      if(a+b*10+c+d*100+e*10+f==g*1000+h*100+i*10+j)
        printf("%d+%d+%d=%d\n",a,b*10+c,d*100+e*10+f,g*1000+h*100+i*10+j);
              。
      

    f***

    2006-01-11 17:36:58

  • 2006-01-08 21:38:58
  • a*100+b*10+c>1000(如:984+30+1>1000满足要求,而984+30+1=9*100+(8+3)*10+(4+1)
    然后用计算机逐个尝试,找出所有满足条件的算式——需要用到多重循环)

    m***

    2006-01-08 21:38:58

  • 2006-01-08 19:47:22
  • 枚舉法就可以

    逆***

    2006-01-08 19:47:22

  • 2006-01-08 13:56:52
  • 用枚舉法.

    剑***

    2006-01-08 13:56:52

类似问题

换一换
  • VB 相关知识

  • 电脑网络技术
  • 电脑网络

相关推荐

正在加载...
最新问答 推荐信息 热门专题 热点推荐
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 172-191
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):