• 题解 AT4251 【[ABC110A] Maximize the Formula】


    突然想到一个奇怪的方法。

    只有 (3) 个数,每个数还都是个位数,那直接一个一个判断不就行了。

    那么,就有下列排列方法。

    • (overline{ab} + c)
    • (overline{ac} + b)
    • (overline{ba} + c)
    • (overline{bc} + a)
    • (overline{ca} + b)
    • (overline{cb} + a)
    • (a + overline{bc})
    • (a + overline{cb})
    • (b + overline{ac})
    • (b + overline{ca})
    • (c + overline{ab})
    • (c + overline{ba})

    然后我们只需要把他们加起来然后找最大值就可以了。

    那么如何把两个数字拼在一起呢?

    很简单,只需要把第一个数 ( imes 10) 后再加上第二个数即可,也就是 (a imes 10 + b)

    代码:

    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
        int maxv = -100, a, b, c;
        scanf("%d%d%d", &a, &b, &c);
        if((a * 10 + b) + c > maxv)maxv = (a * 10 + b) + c;
        if((a * 10 + c) + b > maxv)maxv = (a * 10 + c) + b;
        if((b * 10 + a) + c > maxv)maxv = (b * 10 + a) + c;
        if((b * 10 + c) + a > maxv)maxv = (b * 10 + c) + a;
        if((c * 10 + a) + b > maxv)maxv = (c * 10 + a) + b;
        if((c * 10 + b) + a > maxv)maxv = (c * 10 + b) + a;
        if(a + (b * 10 + c) > maxv)maxv = a + (c * 10 + b);
        if(a + (c * 10 + b) > maxv)maxv = a + (c * 10 + b);
        if(b + (a * 10 + c) > maxv)maxv = b + (a * 10 + c);
        if(b + (c * 10 + a) > maxv)maxv = b + (c * 10 + a);
        if(c + (a * 10 + b) > maxv)maxv = c + (a * 10 + b);
        if(c + (b * 10 + a) > maxv)maxv = c + (b * 10 + a);
        printf("%d", maxv);
        return 0;
    }
    
  • 相关阅读:
    vs错误集合及解决方案
    使用内存映射文件进行EXE、DLL通信(非MFC)
    visual studio使用小技巧(以vs2012为例)
    GetModuleHandle(NULL)获取当前DLL模块基址?
    格式化输出中的%s和%S的陷阱
    关于字符编码
    远程附加调试服务的方法
    结构体内包含位段,其数据内存分布
    微信个人公众号开发-java
    Docker-常用基建的安装与部署
  • 原文地址:https://www.cnblogs.com/tearing/p/12577121.html
Copyright © 2020-2023  润新知