找回密码
 注册
搜索
热搜: 超星 读书 找书
查看: 1213|回复: 2

[原创其它♡] 问答  趣味数字类——《九个数字神奇组合》

[复制链接]
发表于 2008-4-15 18:27:00 | 显示全部楼层 |阅读模式
如何将1、2、3、4、5、6、7、8、9 这九个数字组合,作成一个四位数乘以一个一位数=另一个四位数的等式,并且所有的数字不重复出现,如:1963*4=7852
此题有解并且多解!最好能给出解题过程,谢谢!
回复

使用道具 举报

发表于 2008-4-15 20:13:36 | 显示全部楼层
1738*4=6952


解题过程稍后贴上
回复

使用道具 举报

发表于 2008-4-15 20:26:38 | 显示全部楼层
#include <iostream>
using namespace std;

bool CanSet(int *const col, const int row)
{
  for (int i=1; i<row; i++){
    if (col == col[row]) return false;
  }
  return true;
}

void  IsCheckedEqualEachLine(int *const col)
{
  if (col[5]==1 ||col[5]==9)return ;
  else
  {
    int A = 1000*col[9] + 100*col[8] + 10*col[7] + col[6];
    int B = 1000*col[4] + 100*col[3] + 10*col[2] + col[1];
    if (A*col[5] == B)
    {
      cout << A << " * " << col[5] << " = " << B << endl;
    }
  }
}

void   AllPermutation(int *const col, const int n)
{
  int  row = 1;
  col[1] = 0;  
  while (row > 0)
  {
    col[row]++; //右移一列
    while (col[row]<=n && !CanSet(col,row))
    {
      col[row]++;
    }
    if (col[row] <= n)
    {
      if (row == n)//最后一行排完
      {
        IsCheckedEqualEachLine(col);
      }
      else
      {
        row++;
        col[row] = 0;
      }
    }
    else  
    {
      row--;   
    }
  }
}

void main()
{
  int *const p = new int[10];  //p[0]未使用
  AllPermutation(p,9);
  delete[] p;
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|网上读书园地

GMT+8, 2024-9-25 19:17 , Processed in 0.125621 second(s), 4 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表