用123456789来填不能重复

来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/24 09:44:08
用123456789来填不能重复用123456789来填不能重复用123456789来填不能重复1738*4=69521963*4=7852我编了一个C++程序解这个问题,被乘数从1234搜到4987

用123456789来填不能重复
用123456789来填不能重复

用123456789来填不能重复
1738 * 4 = 6952
1963 * 4 = 7852

我编了一个C++程序解这个问题,被乘数从1234搜到4987(大于5000不可能因为至少乘以2),乘数从2搜到7(1,8,9明显不可能),发现2组1963*4=7852,1738*4=6952。
程序如下:
#include
void extractDigit(int p, int q[10]) {
int p1,p2,p3,p4;

全部展开

我编了一个C++程序解这个问题,被乘数从1234搜到4987(大于5000不可能因为至少乘以2),乘数从2搜到7(1,8,9明显不可能),发现2组1963*4=7852,1738*4=6952。
程序如下:
#include
void extractDigit(int p, int q[10]) {
int p1,p2,p3,p4;
p1=p/1000;
p2=(p-p1*1000)/100;
p3=(p-p1*1000-p2*100)/10;
p4=p-p1*1000-p2*100-p3*10;
q[p1]++;
q[p2]++;
q[p3]++;
q[p4]++;
}
int main() {
int a,b,c,t[10],i,flag=0;
for(i=0;i<=9;i++)t[i]=0;
for(a=1234;a<4987;a++)
{extractDigit(a,t);
for(b=2;b<8;b++)
{t[b]++;
c=a*b;
if(c<=9876){
extractDigit(c,t);
printf("a = %d, b = %d:\t",a,b);
for(i=1;i<=9;i++){printf("%d ",t[i]);if(t[i]!=1)flag=1;}
printf("\n");
if(flag==0){printf("%d*%d=%d\n",a,b,c);getchar();}
for(i=1;i<=9;i++)t[i]=0;
flag=0;
extractDigit(a,t);
}
}
}
return 1;
}

收起

1738 * 4 = 6952
1963 * 4 = 7852
#include
void print(int a_h[]) {
for (int i=0; i<9; i++)
cout<cout<}
void swap(int &a, int &b) ...

全部展开

1738 * 4 = 6952
1963 * 4 = 7852
#include
void print(int a_h[]) {
for (int i=0; i<9; i++)
cout<cout<}
void swap(int &a, int &b) {
int t = a;
a = b;
b = t;
}//交换
void reverse(int a[], int i, int j) {
while (iswap(a[i++],a[j--]);
}
}//颠倒
T(int a[]) {
int b = a[0] * 1000 + a[1] * 100 + a[2] * 10 + a[3],
c = a[4],
d = a[5] * 1000 + a[6] * 100 + a[7] * 10 + a[8];
if(b*c==d) return 1;
return 0;
}
void main() {
int a[9] = {1,2,3,4,5,6,7,8,9}, i, j, n = 0;
while (1) {
if (T(a)) {
cout<<++n<<':';
print(a);
}
for (i=7; i>=0; i--)
if (a[i] < a[i+1]) break;
if (i==-1) break;
for (j=8; j>i; j--)
if (a[j] > a[i]) break;
swap(a[i],a[j]);
reverse(a,i+1,8);
}
cin>>n;
}

收起

?????