小明发现了一个奇妙的数字。它的平方和立方正好把0~9的10个数字每个用且只用了一次。你能猜出这个数字是多少吗?提示:通过取余(%)和整除(/)操作来分离出一个数各个位上的数字,并利用bool类型

先上代码,后面思路。

​

#include<iostream>
using namespace std;
bool wonderful(int num);
void bubbleSort(int a[], int n);
int main()
{
	for (int i = 10;i < 100;i++)
	{
		if (wonderful(i))
		{
			cout << i << endl;
		}
	}
	return 0;
}
bool wonderful(int num)
{
	int standard[10] = { 0,1,2,3,4,5,6,7,8,9 };//创建一个标准数组
	int square, cube, a, b, c, d, e, f, g, h, i, j;//创建平方,立方和10位数字
	square = num * num, cube = num * num * num;
	a = square % 10;//获得每位的数字
	b = square / 10 % 10;
	c = square / 100 % 10;
	d = square / 1000;
	e = cube % 10;
	f = cube / 10 % 10;
	g = cube / 100 % 10;
	h = cube / 1000 % 10;
	i = cube / 10000 % 10;
	j = cube / 100000;
	int temp[10] = { a,b,c,d,e,f,g,h,i,j };//将得到的每位数字创建为一个数组,便于储存
	bubbleSort(temp, 10);//冒泡排序函数
	for (int i = 0;i < 10;++i)//排序完之后,如果和标准数组一样,及满足题目条件
	{
		if (temp[i] == standard[i])
		{
			continue;
		}
		else
		{
			return false;
		}
	}
	return true;
}
void bubbleSort(int a[], int n)//冒泡排序
{
	for (int k = 1; k < n;k++)// 执行 n-1 次扫描 
	{
		for (int j = 0;j < n - k;++j)// 只处理元素 a[0] 至 a[n-k] 
		{
			if (a[j] > a[j + 1])
			{
				int tmp = a[j];
				a[j] = a[j + 1];
				a[j + 1] = tmp;
			}
		}
	}
}
​

       主要的题目思路是:先猜,一个数的平方加上立方的位数等于10且不重复,那么能猜出这个数应该是个两位数,那么平方后的数应该是个四位数,立方后的数应该是个6位数。

所以可以先建立一个10个元素的数组,通过取余(%)和整除(/)分离平方数和立方数的各个位数,取值于新建的数组中,如果该数组的元素不重复包含0-9,把这个数组用冒泡排序,从小排到大,与标准数组进行比较后,相同的话即可得到奇妙数字。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值