// p1230.cpp : Defines the entry point for the console application.
/*
题目
用1-9这9个数,组成一个等式,
乘数3位数,被乘数2位数,结果为4位数
*/
//
#include "stdafx.h"
#include "stdlib.h"
#include "iostream.h"
#include "string.h"
//返回长度
int getlen(int a)
{
int r;
char s[10];
itoa(a,s,10);
r = strlen(s);
return r;
}
//组合
char* getstr(int a,int b,int c)
{
char s1[10];
char s2[10];
char s3[10];
char *r;
itoa(a,s1,10);
itoa(b,s2,10);
itoa(c,s3,10);
r = new char[30];
r[0]='/0';
strcat(r,s1);
strcat(r,s2);
strcat(r,s3);
return r;
}
//获取数a的右起第k位
int getnum(int a,int k)
{
int r,l;
char s[10];
itoa(a,s,10);
l = strlen(s);
if (k>l)
{
r=-1;
}
else
{
r = s[l-k] - '0';
}
return r;
}
//是否重复
bool isre(int a)
{
char s[10];
int arr[10];
int i,j;
//初始化
for (i=0;i<10;i++){arr[i]=0;}
//三个数连成一个字串
itoa(a,s,10);
for (i=0;i<(signed int)strlen(s);i++)
{
j=s[i]-'0';
if (j== 0){return false;}
if (arr[j]==1){return false;}
if (arr[j]==0){arr[j]++;}
}
return true;
}
//判断是否由1-9组成
bool isok(int a,int b,int c)
{
char *s;
int arr[10];
int i,j;
//初始化
for (i=0;i<10;i++){arr[i]=0;}
//三个数连成一个字串
s=getstr(a,b,c);
for (i=0;i<(signed int)strlen(s);i++)
{
j=s[i]-'0';
if (j== 0){return false;}
if (arr[j]==1){return false;}
if (arr[j]==0){arr[j]++;}
}
return true;
}
//输出结果
void out(int a, int b, int c)
{
cout << a << " X " << b << " = " << c <<endl;
}
int main()
{
int i,j,k;
for (i=11;i<=99;i++)
{
if (isre(i))
{
for (j=111;j<=999;j++)
{
if (isre(j))
{
k=i*j;
if (isok(i,j,k)){out(i,j,k);}
}
}
}
}
return 0;
}
结果:
138 X 42 = 5796
157 X 28 = 4396
159 X 48 = 7632
186 X 39 = 7254
198 X 27 = 5346
297 X 18 = 5346
483 X 12 = 5796