主题:入门习题第一题解答
题目:
1. 给定等式 A B C D E 其中每个字母代表一个数字,且不同数字对应不
D F G 同字母。编程求出这些数字并且打出这个数字的
+ D F G 算术计算竖式。
───────
X Y Z D E
我比较笨,想不出什么好算法,只好暴力.....
[code=c]
#include <iostream>
#include <strstream>
using namespace std;
int number_ok(int i)
{
char s;
char *s_p;
char *str_i;
str_i = new char[10];
str_i[0] = '\0';
ostrstream outs(str_i,10);
outs << i << ends;
while(*str_i)
{
s_p=str_i;
s=*s_p;
while(*s_p)
{
s_p++;
if (s==*s_p)
{
delete str_i;
return 0;
}
}
str_i++;
}
delete str_i;
return 1;
}
int main()
{
int i,j,k;
char i_str[10];
char j_str[10];
char k_str[10];
char *str_temp;
for (i = 12354; i <= 98754; i++)
if(number_ok(i))
for (j = 150; j <= 950; j+=100)
if(number_ok(j))
{
k=i+j+j;
if(number_ok(k))
{
i_str[0]='\0';
ostrstream outs_i(i_str,10);
outs_i << i <<ends;
j_str[0]='\0';
ostrstream outs_j(j_str,10);
outs_j << j <<ends;
k_str[0]='\0';
ostrstream outs_k(k_str,10);
outs_k << k <<ends;
if(j_str[0] != i_str[3]) goto next; //j[0]==i[3]
if(i_str[3] != k_str[3]) goto next; //i[3]==k[3]
if(i_str[4] != k_str[4]) goto next; //i[4]==k[4]
str_temp=i_str; //j[1][2] noin i
while(*str_temp)
{
if(j_str[1]==*str_temp) goto next;
str_temp++;
}
str_temp=i_str;
while(*str_temp)
{
if(j_str[2]==*str_temp) goto next;
str_temp++;
}
str_temp=k_str; //j[1][2] noin k
while(*str_temp)
{
if(j_str[1]==*str_temp) goto next;
str_temp++;
}
str_temp=k_str;
while(*str_temp)
{
if(j_str[2]==*str_temp) goto next;
str_temp++;
}
str_temp=k_str; //i[0][1][2] noin k
while(*str_temp)
{
if(i_str[0]==*str_temp) goto next;
str_temp++;
}
str_temp=k_str;
while(*str_temp)
{
if(i_str[1]==*str_temp) goto next;
str_temp++;
}
str_temp=k_str;
while(*str_temp)
{
if(i_str[2]==*str_temp) goto next;
str_temp++;
}
str_temp=i_str; //k[0][1][2] noin i
while(*str_temp)
{
if(k_str[0]==*str_temp) goto next;
str_temp++;
}
str_temp=i_str;
while(*str_temp)
{
if(k_str[1]==*str_temp) goto next;
str_temp++;
}
str_temp=i_str;
while(*str_temp)
{
if(k_str[2]==*str_temp) goto next;
str_temp++;
}
str_temp=j_str; //i[0][1][2] noin j
while(*str_temp)
{
if(i_str[0]==*str_temp) goto next;
str_temp++;
}
str_temp=j_str;
while(*str_temp)
{
if(i_str[1]==*str_temp) goto next;
str_temp++;
}
str_temp=j_str;
while(*str_temp)
{
if(i_str[2]==*str_temp) goto next;
str_temp++;
}
str_temp=j_str; //k[0][1][2] noin j
while(*str_temp)
{
if(k_str[0]==*str_temp) goto next;
str_temp++;
}
str_temp=j_str;
while(*str_temp)
{
if(k_str[1]==*str_temp) goto next;
str_temp++;
}
str_temp=j_str;
while(*str_temp)
{
if(k_str[2]==*str_temp) goto next;
str_temp++;
}
str_temp=i_str; //j[1][2] noin i k
while(*str_temp)
{
if(j_str[1]==*str_temp) goto next;
str_temp++;
}
str_temp=i_str;
while(*str_temp)
{
if(j_str[2]==*str_temp) goto next;
str_temp++;
}
str_temp=k_str;
while(*str_temp)
{
if(j_str[1]==*str_temp) goto next;
str_temp++;
}
str_temp=k_str;
while(*str_temp)
{
if(j_str[2]==*str_temp) goto next;
str_temp++;
}
cout << endl;
cout << " " << "ABCDE" << endl
<< " " << "DFG" << endl
<< "+ " << "DFG" << endl
<< "=======" << endl
<< " " << "XYZDE" << endl << endl
<< " " << i << endl
<< " " << j << endl
<< "+ " << j << endl
<< "=======" << endl
<< " " << k << endl;
next: ;
}
}
return 0;
}
[/code]
GCC下编译通过。
结果:
ABCDE
DFG
+ DFG
=======
XYZDE
29786
850
+ 850
=======
31486
1. 给定等式 A B C D E 其中每个字母代表一个数字,且不同数字对应不
D F G 同字母。编程求出这些数字并且打出这个数字的
+ D F G 算术计算竖式。
───────
X Y Z D E
我比较笨,想不出什么好算法,只好暴力.....
[code=c]
#include <iostream>
#include <strstream>
using namespace std;
int number_ok(int i)
{
char s;
char *s_p;
char *str_i;
str_i = new char[10];
str_i[0] = '\0';
ostrstream outs(str_i,10);
outs << i << ends;
while(*str_i)
{
s_p=str_i;
s=*s_p;
while(*s_p)
{
s_p++;
if (s==*s_p)
{
delete str_i;
return 0;
}
}
str_i++;
}
delete str_i;
return 1;
}
int main()
{
int i,j,k;
char i_str[10];
char j_str[10];
char k_str[10];
char *str_temp;
for (i = 12354; i <= 98754; i++)
if(number_ok(i))
for (j = 150; j <= 950; j+=100)
if(number_ok(j))
{
k=i+j+j;
if(number_ok(k))
{
i_str[0]='\0';
ostrstream outs_i(i_str,10);
outs_i << i <<ends;
j_str[0]='\0';
ostrstream outs_j(j_str,10);
outs_j << j <<ends;
k_str[0]='\0';
ostrstream outs_k(k_str,10);
outs_k << k <<ends;
if(j_str[0] != i_str[3]) goto next; //j[0]==i[3]
if(i_str[3] != k_str[3]) goto next; //i[3]==k[3]
if(i_str[4] != k_str[4]) goto next; //i[4]==k[4]
str_temp=i_str; //j[1][2] noin i
while(*str_temp)
{
if(j_str[1]==*str_temp) goto next;
str_temp++;
}
str_temp=i_str;
while(*str_temp)
{
if(j_str[2]==*str_temp) goto next;
str_temp++;
}
str_temp=k_str; //j[1][2] noin k
while(*str_temp)
{
if(j_str[1]==*str_temp) goto next;
str_temp++;
}
str_temp=k_str;
while(*str_temp)
{
if(j_str[2]==*str_temp) goto next;
str_temp++;
}
str_temp=k_str; //i[0][1][2] noin k
while(*str_temp)
{
if(i_str[0]==*str_temp) goto next;
str_temp++;
}
str_temp=k_str;
while(*str_temp)
{
if(i_str[1]==*str_temp) goto next;
str_temp++;
}
str_temp=k_str;
while(*str_temp)
{
if(i_str[2]==*str_temp) goto next;
str_temp++;
}
str_temp=i_str; //k[0][1][2] noin i
while(*str_temp)
{
if(k_str[0]==*str_temp) goto next;
str_temp++;
}
str_temp=i_str;
while(*str_temp)
{
if(k_str[1]==*str_temp) goto next;
str_temp++;
}
str_temp=i_str;
while(*str_temp)
{
if(k_str[2]==*str_temp) goto next;
str_temp++;
}
str_temp=j_str; //i[0][1][2] noin j
while(*str_temp)
{
if(i_str[0]==*str_temp) goto next;
str_temp++;
}
str_temp=j_str;
while(*str_temp)
{
if(i_str[1]==*str_temp) goto next;
str_temp++;
}
str_temp=j_str;
while(*str_temp)
{
if(i_str[2]==*str_temp) goto next;
str_temp++;
}
str_temp=j_str; //k[0][1][2] noin j
while(*str_temp)
{
if(k_str[0]==*str_temp) goto next;
str_temp++;
}
str_temp=j_str;
while(*str_temp)
{
if(k_str[1]==*str_temp) goto next;
str_temp++;
}
str_temp=j_str;
while(*str_temp)
{
if(k_str[2]==*str_temp) goto next;
str_temp++;
}
str_temp=i_str; //j[1][2] noin i k
while(*str_temp)
{
if(j_str[1]==*str_temp) goto next;
str_temp++;
}
str_temp=i_str;
while(*str_temp)
{
if(j_str[2]==*str_temp) goto next;
str_temp++;
}
str_temp=k_str;
while(*str_temp)
{
if(j_str[1]==*str_temp) goto next;
str_temp++;
}
str_temp=k_str;
while(*str_temp)
{
if(j_str[2]==*str_temp) goto next;
str_temp++;
}
cout << endl;
cout << " " << "ABCDE" << endl
<< " " << "DFG" << endl
<< "+ " << "DFG" << endl
<< "=======" << endl
<< " " << "XYZDE" << endl << endl
<< " " << i << endl
<< " " << j << endl
<< "+ " << j << endl
<< "=======" << endl
<< " " << k << endl;
next: ;
}
}
return 0;
}
[/code]
GCC下编译通过。
结果:
ABCDE
DFG
+ DFG
=======
XYZDE
29786
850
+ 850
=======
31486