欢迎关注我的微信公众号:
编程之蓁
ID:
bianchengzhizhen
及时分享算法、计算机科学以及游戏编程内容
本人CSDN博客主页:
https://blog.csdn.net/D16100?spm=1000.2115.3001.5343
欢迎互相交流学习
————————————————
小明正看着 203879 这个数字发呆。
原来,203879 * 203879 = 41566646641
这有什么神奇呢?仔细观察,203879 是个6位数,并且它的每个数位上的数字都是不同的,并且它平方后的所有数位上都不出现组成它自身的数字。
具有这样特点的6位数还有一个,请你找出它!
再归纳一下筛选要求:
/*
排他平方数
小明正看着 203879 这个数字发呆。
原来,203879 * 203879 = 41566646641
这有什么神奇呢?仔细观察,203879 是个6位数,
并且它的每个数位上的数字都是不同的,并且它平方后的所有数位上都不出现组成它自身的数字。
具有这样特点的6位数还有一个,请你找出它!
再归纳一下筛选要求:
6位正整数
每个数位上的数字不同
其平方数的每个数位不含原数字的任何组成数位
*/
#include
using namespace std;
int main(){
for( int y = 1; y < 10; y++){
for(int e = 0; e < 10; e++){
if( y!= e )
for(int san = 0; san < 10; san++){
if( san != e && san != y)
for(int si = 0; si < 10; si++){
if( si != y && si != e && si != san)
for(int w = 0; w < 10; w++){
if( w != y && w!= e && w != san && w != si)
for(int l = 0; l < 10; l++){
if( l != y && l!= e && l != san && l != si && l != w){
long long i = y * 100000 + e * 10000 + san * 1000 + si * 100 + w * 10 + l;
long long z = i * i;
while( z > 0){
int j = z % 10;
if( j == y || j == e || j == san || j == si || j == w || j == l){
break;
}
z = z / 10;
}
if( (z % 10 == 0) && ((z/10) < 10)){
cout << i * i << endl;
cout << i <<endl;
}
}
}
}
}
}
}
}
}
#include
#include // 要用这个库 不过dev C++ 好像并不支持这个库
using namespace std;
// 自己编写的函数 用于判断check
bool check(long long i, long long ii){
string str_i,str_ii;
i2s(i, str_i);
i2s(ii, str_ii);
// 将两个进行循环比较
for(int x = 0; x < str_i.size(); x++){
if(str_ii.find(str_i[x]) != string::npos) // 没有找到相同的,判断语句菜不成立,才 不执行下面的 return 语句。
return false;
}
return true;
}
// 将longlong型数 变为字符串
void i2s(long long i, string &basic_string){
stringstream ss;
ss << i;
ss >> basic_string;
}
int main(){
for( int y = 1; y < 10; y++){
for(int e = 0; e < 10; e++){
if( y!= e )
for(int san = 0; san < 10; san++){
if( san != e && san != y)
for(int si = 0; si < 10; si++){
if( si != y && si != e && si != san)
for(int w = 0; w < 10; w++){
if( w != y && w!= e && w != san && w != si)
for(int l = 0; l < 10; l++){
if( l != y && l!= e && l != san && l != si && l != w){
long long i = y * 100000 + e * 10000 + san * 1000 + si * 100 + w * 10 + l;
long long z = i * i;
// 自己编写一个函数
if( check(i, z) ){
cout << i << " " << i * i << endl;
}
}
}
}
}
}
}
}
}
本题其实题目很简单,我们要做的就是读懂题目的意思,题目给了我们很多的判断条件。我们只需要拆分开来,一一枚举。再之后进行筛选。我才用的是一个经典简单的算法,即算出末尾来进行判断!
【贪玩巴斯】带你学:C++ tips ——知识点: C++整型short,int,long和long long的区别 2021年12月20日
【贪玩巴斯】带你学:C++ tips ——知识点: continue、break、return的区别
【贪玩巴斯】带你学:C++ tips ——知识点:string::npos 用法详细解析 , 看这一篇就够了 2021年12月21日
【贪玩巴斯】C++ tips——知识点:find()函数 & find_first_of()函数 & 类似Java中的indexOf()函数