蓝桥杯——奇妙的数字

题目要求:

奇妙的数字

小明发现了一个奇妙的数字。它的平方和立方正好把0~9的10个数字每个用且只用了一次。
你能猜出这个数字是多少吗?

请填写该数字,不要填写任何多余的内容。


解题思路:

利用集合中的元素不能重复,枚举i,将i^2和i^3的每位数字都存到集合st中,如果st的大小为10,则符合条件。

#include<iostream> 
#include<cmath>
#include<set>
using namespace std;
//set<int> st;//注集合st不能是全局的!一开始把集合的声明写在了这里,
		//这样的话不就是每个i取得的一些数都放进了这里面嘛!
                //这样的话st.size()退出就不是这个i符合条件了,
	        //而是它和它前面的i们一起的取得的数字满10个 
int a,b,c,d,e,f,g,h,m,n;
int main()
{
	//它的平方和立方一共是10位数,则它的平方是4位数,它的立方是6位数,则它自己是两位数 
	for(int i=31;i<=99;i++)
	{
	    set<int> st;//注集合st不能是全局的!而是每枚举一个i有一个集合! 
		int x=i*i;
		int y=i*i*i;
		if(x>=1000&&y>=100000)
		{
		a = x/1000;
		st.insert(a);
		b = x%1000/100;
		st.insert(b);
		c = x%100/10;
		st.insert(c);
		d = x%10;
		st.insert(d);
		
		e = y/100000;
		st.insert(e);
		f = y%100000/10000;
		st.insert(f);
		g = y%10000/1000;
		st.insert(g);
		h = y%1000/100;
		st.insert(h);
		m = y%100/10;
		st.insert(m);
		n = y%10;
		st.insert(n);	
		//cout<<st.size()<<endl;
		if(st.size()==10)
		{
			cout<<i<<endl;
			return 0;
		}
		}
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值