这个题目的思路,是这样的我们假设数字A是这样的一个数字 a*(10^(k+1)) + b*(10^k) + c 其中 a 为任意数字,b为去掉的那一位数字,范围 [0,9] 的整数,c<10^k 。则去掉b后的数字B为 a*(10^k) + c ,而A+B的值可以用一下式子表示 (11*a+b)*(10^k) + 2*c 这个值等于 n , 我们枚举 k的值,从0到10 ,对于取定的k值,显然有一下对应 2*c = n%(10^k) 或者 2*c = n%(10^k) + 10^k ; 可以求出整数c的值,然后枚举 b的值,来确定a的值,使得a的值为整数 /..计算中可能会出现重复的结果,输出是记得要处理一下哦
#include
<
iostream
>
#include < algorithm >
using namespace std;
int re[ 100 ];
int main()
{
int n,a,i,j,k,num,x,y,temp,tt;
while (scanf( " %d " , & n) && n)
{
num = 0 ,tt = 1 ;
for (k = 0 ; k <= 10 ; k ++ ){
for (j = 0 ; j < 2 ; j ++ ){
y = n % tt,x = n / tt;
if (j == 1 )
y += tt,x -- ;
if (x > 0 && y % 2 == 0 ){
for (i = 0 ; i <= 9 ; i ++ ){
if ((x - i) % 11 == 0 ){
a = (x - i) / 11 ;
temp = tt * (a * 10 + i) + y / 2 ;
re[num ++ ] = temp; }}}}
tt *= 10 ;
}
sort(re,re + num);
if (num == 0 ) printf( " No solution.\n " );
else {
printf( " %d " ,re[ 0 ]);
for (i = 1 ; i < num; i ++ )
if (re[i] != re[i - 1 ]) printf( " %d " ,re[i]);
printf( " \n " );
}
}
return 0 ;
}
#include < algorithm >
using namespace std;
int re[ 100 ];
int main()
{
int n,a,i,j,k,num,x,y,temp,tt;
while (scanf( " %d " , & n) && n)
{
num = 0 ,tt = 1 ;
for (k = 0 ; k <= 10 ; k ++ ){
for (j = 0 ; j < 2 ; j ++ ){
y = n % tt,x = n / tt;
if (j == 1 )
y += tt,x -- ;
if (x > 0 && y % 2 == 0 ){
for (i = 0 ; i <= 9 ; i ++ ){
if ((x - i) % 11 == 0 ){
a = (x - i) / 11 ;
temp = tt * (a * 10 + i) + y / 2 ;
re[num ++ ] = temp; }}}}
tt *= 10 ;
}
sort(re,re + num);
if (num == 0 ) printf( " No solution.\n " );
else {
printf( " %d " ,re[ 0 ]);
for (i = 1 ; i < num; i ++ )
if (re[i] != re[i - 1 ]) printf( " %d " ,re[i]);
printf( " \n " );
}
}
return 0 ;
}