zoukankan      html  css  js  c++  java
  • HDU 1271 整数对

    这个题算是数论类吧,也许也就是水题级别,不过我估计是很难想出来的````

    首先你自己拿个数试一下比较好看出来规律。

    比如 A = 3457

    拿掉数字5

    B = 347

    把A写成34*10^2+5*10^1+7

    B写成34*10+7

    更一般地,如果拿掉的是第k位数字(0<=k<=log10(N)),A = a*10^(k+1)+b*10^k+c.(其中a为数字b之前的数,c为数字b之后的数)

    然后B = a*10^k+c

    有方程A+B=N,带入,得11*10^k*a+10^k*b+2*c = N,

    10^k*b<=9*10^k,2*c<2*10^k ,所以有10^k*b+2*c < 11*10^k,那么a = N/(11*10^k)- (10^k*b+2*c)/(11*10^k),在用整数做除法时,后一项=0。

    这样a = N/(11*10^k)

    然后枚举b从0到9,再算d = N-(11*a+b)*k;

    如果d>=0&&d%2==0&&d<10^k,那么就得到一个可行解A=a*10^(k+1)+b*10^k+d/2.

    贴代码:

    View Code
     1 #include <cstdio>
     2 #include <algorithm>
     3 using namespace std;
     4 int main()
     5 {
     6 //    freopen("in.cpp","r",stdin);
     7     int n;
     8     int p[110];
     9     while(scanf("%d",&n),n!=0)
    10     {
    11         int a,b,c,k;
    12         int cur = -1;
    13         for(k=1; k<= n; k *= 10)
    14         {
    15             a = n/(11*k);
    16             for(b=0; b<=9; ++b)
    17             {
    18                 if(a == 0 && b==0) continue;
    19                 c = n-(11*a+b)*k;
    20                 if(c >= 0 && c%2 == 0 && c/2 < k)
    21                 {
    22                     c = c/2;
    23                     p[++cur] =(10*a+b)*k+c;
    24                 }
    25             }
    26         }
    27         if(cur == -1)
    28         {
    29             printf("No solution.\n");
    30             continue;
    31         }
    32         sort(p,p+cur+1);
    33         printf("%d",p[0]);
    34         for(int i=1; i<=cur; ++i)
    35         {
    36             if(p[i] != p[i-1])
    37             {
    38                 printf(" %d",p[i]);
    39             }
    40         }
    41         puts("");
    42     }
    43     return 0;
    44 }
  • 相关阅读:
    leecode 91. 解码方法
    leecode 166. 分数到小数
    剑指 Offer 31. 栈的压入、弹出序列
    leecode 386. 字典序排数
    LeetCode 311 稀疏矩阵的乘法
    leecode 89. 格雷编码
    leecode 79. 单词搜索
    leecode 207. 课程表
    QT -- 解决:Error: Could not decode "*.cpp" with "UTF-8"
    VS+QT -- 没有PRO文件的问题
  • 原文地址:https://www.cnblogs.com/allh123/p/3043872.html
Copyright © 2011-2022 走看看