蓝桥杯历年真题理解

解题思路给我们了一个大致范围

10的三次方是最小的四位数,30的三次方是五位数,估出一个大致的范围就是10-30

有题目可知这个数的立方和4次方拼接在一起的这十个数字刚好是0-9,那我们可以先将每一位都放进同一个数组,然后排序排序完成后再利用循环检验是否为0-9这10个数字

#include <stdio.h>

int judge(int a)
{
	int th = a * a * a;//四位数
	int forth = a * a * a * a;//六位数
	//接下来实现将每一位装进数组
	int arr[10];
	arr[0] = th % 10;
	arr[1] = th / 10 % 10;
	arr[2] = th / 100 % 10;
	arr[3] = th / 1000 % 10;
	arr[4] = forth % 10;
	arr[5] = forth / 10 % 10;
	arr[6] = forth / 100 % 10;
	arr[7] = forth / 1000 % 10;
	arr[8] = forth / 100000 % 10;
	arr[9] = forth / 1000000 % 10;
	//下一步进行排序
	for (int i = 0; i < 9;i++)
	{
		for (int j = 0; j < 9 - i; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				int temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
	}
	//排序完成,进行判断
	//aim作为标记,如果不是0-9这十个数字aim会变成0,如果是就是1
	//判断完成后直接返回aim的值跟我们之前想要达成的效果(符合条件返回1)是一致的
	int aim = 1;
	for (int r = 0; r < 10; r++)
	{
		if (r == arr[r])
		{
			continue;
		}
		else
			aim = 0;//如果这十个数不是0-9各一个的情况就将aim赋值成0
	}
	return aim;



}


int main()
{
	//枚举10-30
	for (int a = 10; a < 31; a++)
	{

		//写一个函数专门用来判断是否符合条件
		//初步设想这个函数有返回值如果符合条件返回1,不符合返回0
		int three = a * a * a;
		int forth1 = a * a * a * a;
		if ((three > 1000 && three < 10000) && (forth1 < 1000000 && forth1>100000))
			//如果满足条件再进入函数,因为10-30只是一个大致范围
		{
			int i = judge(a);
			if (i == 1)
			{
				printf("%d", a);
			}
		}
	}


	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值