用1、2、3、4、5、6、7、8、9八个数字,组成两个不同的四位数,使它们相减的差是4
30个回答
2010-08-20
展开全部
此问题肯定无解!经编程对所有可能组合(362880种)进行验证,没有一种合乎要求。【c++代码如下,虽然逻辑可能比较笨】
#include "stdafx.h"
#include <atlrx.h>
int m[9][2] = {{1,0},{2,0},{3,0},{4,0},{5,0},{6,0},{7,0},{8,0},{9,0}};
int a,b,c,d,w,x,y,z;
int n=0, o=0;
int _tmain(int argc, _TCHAR* argv[])
{
for (int i1=0;i1<=8;i1++)
{
a=m[i1][0];
m[i1][1]=1;
for (int i2=0;i2<=8;i2++)
{
if (m[i2][1] == 1) continue;
b=m[i2][0];
m[i2][1]=1;
for (int i3=0;i3<=8;i3++)
{
if (m[i3][1] == 1) continue;
c=m[i3][0];
m[i3][1]=1;
for (int i4=0;i4<=8;i4++)
{
if (m[i4][1] == 1) continue;
d=m[i4][0];
m[i4][1]=1;
for (int i5=0;i5<=8;i5++)
{
if (m[i5][1] == 1) continue;
w=m[i5][0];
m[i5][1]=1;
for (int i6=0;i6<=8;i6++)
{
if (m[i6][1] == 1) continue;
x=m[i6][0];
m[i6][1]=1;
for (int i7=0;i7<=8;i7++)
{
if (m[i7][1] == 1) continue;
y=m[i7][0];
m[i7][1]=1;
for (int i8=0;i8<=8;i8++)
{
if (m[i8][1] == 1) continue;
z=m[i8][0];
m[i8][1]=1;
//printf("%d%d%d%d, %d%d%d%d\n", a,b,c,d,w,x,y,z);
n++;
if ((a*1000+b*100+c*10+d) - (w*1000+x*100+y*10+z) == 4 || (a*1000+b*100+c*10+d) - (w*1000+x*100+y*10+z) == -4)
{
printf("符合要求的结果:%d%d%d%d, %d%d%d%d", a,b,c,d,w,x,y,z);
o++;
}
m[i8][1]=0;
}
m[i7][1]=0;
}
m[i6][1]=0;
}
m[i5][1]=0;
}
m[i4][1]=0;
}
m[i3][1]=0;
}
m[i2][1]=0;
}
m[i1][1]=0;
}
printf("枚举组合%d种,符合的结果有%d种\n", n,o);
system("pause");
return 0;
}
#include "stdafx.h"
#include <atlrx.h>
int m[9][2] = {{1,0},{2,0},{3,0},{4,0},{5,0},{6,0},{7,0},{8,0},{9,0}};
int a,b,c,d,w,x,y,z;
int n=0, o=0;
int _tmain(int argc, _TCHAR* argv[])
{
for (int i1=0;i1<=8;i1++)
{
a=m[i1][0];
m[i1][1]=1;
for (int i2=0;i2<=8;i2++)
{
if (m[i2][1] == 1) continue;
b=m[i2][0];
m[i2][1]=1;
for (int i3=0;i3<=8;i3++)
{
if (m[i3][1] == 1) continue;
c=m[i3][0];
m[i3][1]=1;
for (int i4=0;i4<=8;i4++)
{
if (m[i4][1] == 1) continue;
d=m[i4][0];
m[i4][1]=1;
for (int i5=0;i5<=8;i5++)
{
if (m[i5][1] == 1) continue;
w=m[i5][0];
m[i5][1]=1;
for (int i6=0;i6<=8;i6++)
{
if (m[i6][1] == 1) continue;
x=m[i6][0];
m[i6][1]=1;
for (int i7=0;i7<=8;i7++)
{
if (m[i7][1] == 1) continue;
y=m[i7][0];
m[i7][1]=1;
for (int i8=0;i8<=8;i8++)
{
if (m[i8][1] == 1) continue;
z=m[i8][0];
m[i8][1]=1;
//printf("%d%d%d%d, %d%d%d%d\n", a,b,c,d,w,x,y,z);
n++;
if ((a*1000+b*100+c*10+d) - (w*1000+x*100+y*10+z) == 4 || (a*1000+b*100+c*10+d) - (w*1000+x*100+y*10+z) == -4)
{
printf("符合要求的结果:%d%d%d%d, %d%d%d%d", a,b,c,d,w,x,y,z);
o++;
}
m[i8][1]=0;
}
m[i7][1]=0;
}
m[i6][1]=0;
}
m[i5][1]=0;
}
m[i4][1]=0;
}
m[i3][1]=0;
}
m[i2][1]=0;
}
m[i1][1]=0;
}
printf("枚举组合%d种,符合的结果有%d种\n", n,o);
system("pause");
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把1、2、3、4、5、6、7、9 组成两个四位数(每个数只能用一次),
使他们的乘积最大,这两个四位数是( )和( )。
9531 7642
使他们的乘积最大,这两个四位数是( )和( )。
9531 7642
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
他的意思是用其中的8个数字吧
如果是的话就是9876-5432或者8765-4321
如果是的话就是9876-5432或者8765-4321
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
老大:1、2、3、4、5、6、7、8、9 是九个数字不是八个,是九个啦。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2010-08-20
展开全部
1-9不是8个数分数不要浪费没人回答就给我
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询