已解决问题

C++程序 数学题

[ 标签:程序,c++ 程序,数学题 ]

1.      有0、1、2、3、4、5、6、7、8、9十个数,按要求填入下列算式中,要求每个数只使用一次,首位数不能为零,输出时显示所有可能的组合并统计个数。

 ???+???= ????(两个三位数相加等于一个四位数)

匿名 回答:6 人气:50 解决时间:2009-07-04 18:11
  
满意答案
#include<iostream>
using namespace std;

int visit[10];//用来标志是否用过的。
int key[10];//用来存左边的六个数。

void solve(int n)
{
int i,j,a,b;
int p[4],k;
if(n==6)
{
// for(i=0;i<6;i++) cout<<key[i]<<" ";cout<<endl;
if(key[0]==0||key[3]==0) return;
a=key[0]*100+key[1]*10+key[2];
b=key[3]*100+key[4]*10+key[5];
j=a+b;
if(j<1000||j>9999) return ;//限制是四个数。
//检查j中的数是不是已经出来的的。
i=0;
while(j)
{
p[i++]=j%10;
j=j/10;
}
//判断是不是有相同的。
for(j=0;j<i;j++)
{
//之前是不是出现过
if(visit[p[j]]==1) return ;
for(k=j+1;k<i;k++)
{
if(p[j]==p[k]) return;
}
}
//说明已知找到。
cout<<a<<" + "<<b<<" = "<<a+b<<endl;

return ;
}
for(i=0;i<10;i++)
{
if(visit[i]==0)
{
visit[i]=1;
key[n]=i;
solve(n+1);
visit[i]=0;
}
}
}

int main()
{
int i;
for(i=0;i<10;i++) visit[i]=0;//表示没用上的数。
solve(0);
return 0;
}
提问人的追问   2009-07-01 10:19
怎么有错误,运行不了啊
回答人的补充   2009-07-01 10:25
我这边运行的了的。有什么错误的,贴出来看下。
提问人的追问   2009-07-01 10:26
运行结果错误
提问人的追问   2009-07-01 10:34
得不到运行结果,能不能修改一下给我啊,急用啊,谢谢啦
回答人的补充   2009-07-01 10:37
不会吧。我记得那时候我看了答案没错的。Q:646203846。细说。
独孤天
回答采纳率:49.8% 2009-06-26 19:08
评价答案
  • 是否解决问题(参与评价0次)
  • 0
  • 0
  • 0
  • 是否原创答案(参与评价0次)
  • 0
  • 0

相关内容

求助得到的答案

不好意思,我不会呢。
徦如、伱還在 回答采纳率:39.8% 2009-06-28 13:34

其他答案

这个方法比较笨,不能能运行,测试过了,暂时没想到比较好的办法

#include <stdio.h>

int data_check(int a, int b, int c)
{
int data[10] = {0};
int tmp = 0;

tmp = a / 100;
data[tmp]++;
tmp = (a % 100) / 10;
data[tmp]++;
tmp = a % 10;
data[tmp]++;

tmp = b / 100;
data[tmp]++;
tmp = (b % 100) / 10;
data[tmp]++;
tmp = b % 10;
data[tmp]++;

tmp = c / 1000;
data[tmp]++;
tmp = (c % 1000) / 100;
data[tmp]++;
tmp = (c % 100) / 10;
data[tmp]++;
tmp = c % 10;
data[tmp]++;

for (tmp = 0; tmp < 10; tmp++)
if (data[tmp] != 1)
return 0;

printf(" %d %d %d\n", a, b, c);
return 1;
}
int main(void)
{
int a = 0, b = 0, c = 0;
int total = 0;

for (a = 100; a <= 999; a++)
for (b = 100; b <= 999; b++)
{
if((a + b) / 1000)
{
total += data_check(a, b, a + b);
}
}

printf("Total: %d\n", total);
return 0;
}
回答人的补充   2009-06-26 18:51
有点错,
最后加一句 total /= 2; 就可以了
郭子 回答采纳率:20.0% 2009-06-26 18:45
#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<=9; i++)
hash[i]=true;
search(1);
cout<<"共有"<<ans<<"个。"<<endl;
int cici;
cin>>cici;
return 0;
}
匿名 回答采纳率:18.8% 2009-06-26 18:55
#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<=9; i++)
hash[i]=true;
search(1);
cout<<"共有"<<ans<<"个。"<<endl;
int cici;
cin>>cici;
return 0;
}
ㄣ依じ☆ve戀 回答采纳率:34.1% 2009-06-26 18:59
#include <stdio.h>
int main()
{
int i1,i2,i3,i4,i5,i6,i7,i8,i0,i9;
int a,b,c,cnt;
cnt=0;
for(i0=1;i0<10;i0++)
{
for(i1=0;i1<10;i1++)
{
if(i1==i0)
continue;
for(i2=0;i2<10;i2++)
{
if(i2==i0||i2==i1)
continue;
a=i0*100+i1*10+i2;
for(i3=1;i3<10;i3++)
{
if(i3==i0||i3==i1||i3==i2)
continue;
for(i4=0;i4<10;i4++)
{
if(i4==i0||i4==i1||i4==i2||i4==i3)
continue;
for(i5=0;i5<10;i5++)
{
if(i5==i0||i5==i1||i5==i2||i5==i3||i5==i4)
continue;
b=i3*100+i4*10+i5;
for(i6=1;i6<10;i6++)
{
if(i6==i0||i6==i1||i6==i2||i6==i3||i6==i4||i6==i5)
continue;
for(i7=0;i7<10;i7++)
{
if(i7==i0||i7==i1||i7==i2||i7==i3||i7==i4||i7==i5||i7==i6)
continue;
for(i8=0;i8<10;i8++)
{
if(i8==i0||i8==i1||i8==i2||i8==i3||i8==i4||i8==i5||i8==i6||i8==i7)
continue;
for(i9=0;i9<10;i9++)
{
if(i9==i0||i9==i1||i9==i2||i9==i3||i9==i4||i9==i5||i9==i6||i9==i7||i9==i8)
continue;
c=i9+i8*10+i7*100+i6*1000;
if(c==a+b)
{
printf("%d+%d=%d\n",a,b,c);
cnt++;
}
}
}
}
}
}
}
}
}
}
}
printf("共有%d种组合\n",cnt);
return 0;
}
Vito 回答采纳率:31.6% 2009-06-26 19:00