2015年蓝桥杯省赛c组填空题 奇妙的数字 知识点:枚举

44 阅读1分钟

奇妙的数字 枚举

视频解析 2015-C-C题6奇妙的数字_哔哩哔哩_bilibili

code

首先先把i的平方和立方都转为字符串,然后再全部插入到set里面进行去重,如果经过去重之后是10位数,并且插入之前的字符串个数就是10位数,说明没有重复的要去掉,那么这10位数肯定就是0~9,这个数就是答案。

#include<iostream>
#include<set>
#include<sstream>
#include<string>
using namespace std;
void i2s(int num,string& str)  //用引用返回就不用再用返回值了
{
	stringstream ss;
	ss<<num;
	ss>>str;
}

bool check(string str)
{
	set<char>s;
	for(int i=0;i<str.size();i++)
	s.insert(str[i]);
	
	return s.size()==10&&str.size()==10;  //如果set里面是10位不重复的数,并且str里面也正好是10位数,说明str里面存的就是0~9
}
int main()
{
	
	//从1枚举到10000
	for(int i=0;i<1000;i++)
	{
       //先把i的平方和立方都转为字符串
       string s1,s2;
	   i2s(i*i,s1);
       i2s(i*i*i,s2);
	   
	   //把平方和立方的字符串拼接起来,检查是否是0~9十位数并且不重复
	   if(check(s1+s2))
	   {
	   	  cout<<i<<endl;
	   	  break;
	   }
	}
	
	return 0;
}

image.png

验证

69的平方=4761 69的立方=328509

观察发现并没有重复的数字,并且包含了0~9的所有数字