hdu 1271 整数对

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

 

posted @ 2011-05-08 13:31  yansirfuture  阅读(367)  评论(0编辑  收藏  举报