这个题目的思路,是这样的我们假设数字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;
}