蓝桥杯算法基础_排它平方数_课程笔记
创始人
2025-05-31 23:10:19

题目

203879 * 203879 = 41566646641

这有什么神奇呢?仔细观察,203879 是个6位数,并且它的每个数位上的数字都是不同的,并且它平方后的所有数位上都不出现组成它自身的数字。

具有这样特点的6位数还有一个,请你找出它!

再归纳一下筛选要求:

6位正整数
每个数位上的数字不同
其平方数的每个数位不含原数字的任何组成数位
以下程序实现了这一功能,请你补全以下空白处内容:

#include 
using namespace std;int main()
{int num[10], flag;for (long long i = 123456; i <= 987654; i++){long long a = i;long long b = i * i;memset(num, 0, sizeof(num));flag = 1;while (a){_________________;}if (flag){while (b){if (num[b % 10]){flag = 0;break;}b /= 10;}if (flag)cout << i << endl;}}return 0;
}

提示:

0的平方为0
1的平方为1
5的平方为5
6的平方为6
以上这4个数字都不能作为原数字的最后一位,可以在最后一位排除
且第一位不能为0

  • 空白处代码应为:
if (num[a % 10])
{flag = 0;break;
}
num[a % 10]++;
a /= 10;

问题分析

1.6位正整数;
2.每个数位上的数字不同;
3.其平方数的每个数位不含原数字的任何组成数位;
4.int占4字节内存,long long占8字节,六位数的平方int型变量可能存不下,因此需要用long long;
5.如何进行判断,memset(arr , val , sizeof(arr));来对数组进行初始化。memset函数用法

代码实现

#include
using namespace std;
#includevoid func()
{int num[10];for (long long i = 123456; i <= 987654; i++){long long a = i;long long b = i * i;memset(num, 0, sizeof(num));   //对数组进行初始化,赋值。num = {0,0,0,0,0,0,0,0,0,0}int Flag = 1;while (a){if (num[a % 10]){Flag = 0;break;}num[a % 10]++;a /= 10;}if (Flag){while (b){if (num[b % 10]){Flag = 0;break;}b /= 10;}if (Flag){cout << i << "\t" << i * i << endl;}}}
}int main()
{func();system("pause");return 0;
}
  • 输出结果:
203879  41566646641
639172  408540845584
请按任意键继续. . .

相关内容

热门资讯

日本财务大臣就日元走弱发出警告... 来源:环球市场播报 在日本央行当天稍早宣布加息并召开新闻发布会后,日元兑美元明显走软,日本财务大臣...
特朗普五天圣诞长假期不会惠及大... 来源:环球市场播报 特朗普总统签署行政命令,允许联邦雇员今年12月24日和12月26日放假,这引发...
小米17 Ultra发布在即,... 12月18日,小米公司通过官方微博宣布与徕卡的全球影像战略合作正式升级,此次升级引入全新的“战略共创...
视频丨高市早苗持续遭批,日本民... 日本首相高市早苗的涉台错误言论引发日本国内持续批评。19日,部分日本民众在东京举行抗议集会,要求高市...
一场千万美元的赌注:造一个替你... 出品|虎嗅科技组作者|李一飞编辑|陈伊凡头图|视觉中国“AI原生100”是虎嗅科技组推出针对AI原生...