码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • LQ0009 平方十位数【枚举】


    题目来源:蓝桥杯2017决赛

    题目描述
    由0~9这10个数字不重复、不遗漏,可以组成很多10位数字。
    这其中也有很多恰好是平方数(是某个数的平方)。
    比如:1026753849,就是其中最小的一个平方数。
    请你找出其中最大的一个平方数是多少?

    输出格式
    输出一个整数表示答案

    问题分析
    这个题用枚举来解决,一种是枚举数,其平方为10位数,再判定是否正好覆盖数字0-9;另外一种是枚举0-9的数字构成的数,然后判定该数是否为平方数。枚举0-9数字可以使用置换函数prev_permutation()来实现。
    不论哪一种枚举,都是从大到小再做判定。
    这个题算出的结果是9814072356。

    先求枚举的范围,数字的平方为10位数,编写以下C语言离线程序:

    /* LQ0009 平方十位数 离线计算用于计算值的范围 */
    
    #include 
    #include 
    
    char s[16];
    
    int main()
    {
        int i = 1, start, end;
        for (; ; i++) {
            sprintf(s, "%d", i * i);
            if (strlen(s) >= 10) {
                start = i;
                break;
            }
        }
    
        for (i++; ; i++) {
            sprintf(s, "%d", i * i);
            if (strlen(s) > 10) {
                end = i - 1;
                break;
            }
        }
    
        printf("%d %d\n", start, end);
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    上述程序计算的结果是"31623 99999",那么结果应该是31623到99999之间的平方数,从大到小寻找到覆盖0-9数字的数即得到结果。确定有解的话,有最大数就够了。为了保险起见,在这2个数的范围内答案。

    AC的C语言程序如下:

    /* LQ0009 平方十位数 */
    
    #include 
    #include 
    
    char s[10 + 1];
    int cnt[10];
    
    int main()
    {
        for (long long i = 99999; i >= 31623; i--) {
            sprintf(s, "%lld", i * i);
    
            memset(cnt, 0, sizeof cnt);
            for (int j = 0; s[j]; j++)
                cnt[s[j] - '0']++;
    
            int flag = 1;
            for (int i = 0; i < 10; i++)
                if (cnt[i] != 1) {
                    flag = 0;
                    break;
                }
    
            if (flag) {
                printf("%lld\n", i * i);
                break;
            }
        }
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    AC的C++语言程序(枚举0-9数字)如下:

    /* LQ0009 平方十位数 */
    
    #include 
    #include 
    #include 
    #include 
    
    using namespace std;
    
    bool issquare(long long n)
    {
        long long t = sqrt(n);
        if (t * t == n) return true;
        else return false;
    }
    
    int main()
    {
        char s[] = "9876543210";
        do {
            if (issquare(atoll(s))) {
                cout << s << endl;
                break;
            }
        } while (prev_permutation(s, s +10));
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
  • 相关阅读:
    关于科研学习中的几个问题:如何看论文?如何评价工作?如何找idea?
    HTML+CSS滚动条样式如何单独给firefox设置 scrollbar-width: none;,而不影响其他浏览器
    【1day】泛微e-office OA SQL注入漏洞学习
    基于HSIC-GL的多元时间序列非线性Granger因果关系分析
    系列文章之一文纵览机器学习(6)——文本数据的转换处理 | 图像数据的转换处理 | 附:CNN激活层可视化(附源代码)
    39Java System类
    【基础算法】滑动窗口
    基于JAVA社区老年人信息管理系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署
    听书项目总结
    【漏洞复现】Weblogic 任意文件上传漏洞(CVE-2018-2894)
  • 原文地址:https://blog.csdn.net/tigerisland45/article/details/126924732
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号