C语言编程问题(急)

来源:百度知道 编辑:UC知道 时间:2024/06/28 05:32:29
题目:1、有0、1、2、3、4、5、6、7、8、9十个数,按要求填入下列算式中,要求每个数只使用一次,首位数不能为零,输出时显示所有的可能并统计个数。(即两个互不相等的三位数相加要等于一个四位数且所有的数字不能重复!)能够把界面弄漂亮些就更好了!

___ ___ ___ + ___ ___ ___ = ___ ___ ___ ___.
我用的是Turbo C编程,请各位高手把具体程序写上阿!
急急急急急急急急急急急!!!!!!!

dfs可以做10的全排列 减枝即可~

程序如下:

#include<iostream>
using namespace std;
long i,a[20],ans;
bool hash[20];

void print()
{
long i;
for (i=1; i<=3; i++)
cout<<a[i];
cout<<'+';
for (i=4; i<=6; i++)
cout<<a[i];
cout<<'=';
for (i=7; i<=10; i++)
cout<<a[i];
cout<<endl;
}
void search(long t)
{
long i;
if (t==11)
{
long x=a[1]*100+a[2]*10+a[3],y=a[4]*100+a[5]*10+a[6],z=a[7]*1000+a[8]*100+a[9]*10+a[10];
if (x+y==z)
{
print();
ans++;
}
}
for (i=0; i<=9; i++)
{
if (hash[i] && !((t==1 || t==4 || t==7) && i==0))
{
a[t]=i; hash[i]=false;
search(t+1);
hash[i]=true;
}
}
}
int main()
{
for (i=0; i&l