MENU

枚举 + 优化(1)—— 枚举

June 5, 2018 • Read: 3704 • 算法阅读设置

十位平方数展开目录

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

思路 1展开目录

  1. 枚举答案 X [9876853210,1026753849](从最大的数枚举到最小的数)
  2. 判断是不是恰好 0-9 十个数字
  3. 判断是不是完全平方数

    • 令 Y = int (sqrt (x))
    • 判断 Y * Y == X

思路 2(优化)展开目录

  1. 枚举 Y [100000,30000]
  2. 计算 X = Y * Y
  3. 判断 X 是不是恰好是 0-9 十个数字
  • //判断是不是包含0-9
  • bool contains0_9(int x)
  • {
  • if(x == 0)
  • return false;
  • set<int> s;
  • while(x)//把x的末位数字通过模10分离
  • {
  • int d = x % 10;
  • s.insert(d);
  • x /= 10;
  • }
  • return (s.size() == 10);
  • }
  • //完整代码
  • #include <bits/stdc++.h>
  • using namespace std;
  • bool contains0_9(long long x)
  • {
  • set<int> s;
  • while(x)
  • {
  • int d = x % 10;
  • s.insert(d);
  • x /= 10;
  • }
  • return (s.size() == 10);
  • }
  • int main()
  • {
  • for(long long y = 100000;y >= 30000;y--)
  • if(contains0_9(y * y))
  • cout<<y * y<<endl;
  • return 0;
  • }
Last Modified: November 9, 2021
Archives Tip
QR Code for this page
Tipping QR Code