完全平方数问题

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

说明

用0至9这10个数字组成一位数、两位数、三位数、四位数各一个使它们都是非零的完全平方数.例如1367849025就是满足条件的一种分法

输出格式

输出有多少种方案

题解

我们可以自己造出完全平方数怎么造呢例如3用它自己乘它自己就是9就造出来一个完全平方数了优势可以省时间复杂度

然后我们就可以分类讨论四种情况

step 1一位数

一位数的范围是0~9注意题目说“它们都是非零的完全平方数”所以我们枚举时就只要枚举1~3就行了0*0=0

step 2两位数

两位数的范围是10~99只要枚举4~9就行了。

step 3三位数

三位数的范围是100~999只要枚举10~31就行。

step 4四位数

四位数的范围是1000~9999只要枚举32~99。

枚举完之后我们依次将这四个数乘它自己就得到四个完全平方数将四个完全平方数数位拆分后判断是不是都是0~9这几个不重复的数字组成的如果是就ans++

————————————————

版权声明上文有CSDN博主「zealous_zzx」的原创文章改编而来遵循CC 4.0 BY-SA版权协议转载请附上原文出处链接及本声明。

原文链接https://blog.csdn.net/MLJYHP/article/details/128678787


代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
int vis[10001],ans;
void f(int x)
{
  while(x)
  {
    vis[x % 10]++;
    x /= 10;
  }
}
signed main()
{
  for(int i = 1; i <= 3; i++)
    for(int j = 4; j <= 9; j++)
      for(int k = 10; k <= 31; k++)
        for(int l = 32; l <= 99; l++)
        {
          bool fl = 1;
          int a = i * i,b = j * j,c = k * k,d = l * l;
          f(a);
          f(b);
          f(c);
          f(d);
          for(int p = 0; p <= 9; p++)
          {
            if(vis[p] == 0)
            {
              fl = 0;
              break;
            }
          }
          if(fl == 1) ans++;
          memset(vis,0,sizeof(vis));
        }
  cout<<ans;
  return 0;
}

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6