蓝桥杯第六届C/C++ 大学A组省赛题 奇妙的数字

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

解决办法:先确定范围是47-99之间 然后循环获取平方和立方的每一位,形成十位的数组,判断此数组是否正好包好0-9

优化方法:由于用取余数的方法获取每一位这里太麻烦,最好直接将数字转换成字符串。

后面的小难点在于判断构成的字符串是否正好是0-9,这里采用【寻数比对法】,也可以采用【冒泡排序法】,将字符串(对应的数字)从小到大排序,然后和数组{0,1,2,…9}按顺序比对。

//解决办法:先确定范围是47-99之间 然后循环获取平方和立方的每一位,形成十位的数组,判断此数组是否正好包好0-9 
//优化方法:由于获取每一位这里太麻烦,最好直接将数字转换成字符串
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
	int i,x,y,m,n,k; 
	char X[4],Y[10]; 
	for(i = 47;i < 100;i++)
	{	
		k = 0; //清零操作 
		x = i * i; //x是4位 
		y = i * i * i;//y是6位
		itoa(x,X,10);
		itoa(y,Y,10);//分别将平方和立方转换成字符串
		strcat(Y,X);//现在Y就是x和y的十位数字构成的字符串(合并) 
		//接下来任务就是验证Y里面是0-9,注意字符和数字的转换问题 
		for(m = 48;m < 58;m++) 
			for(n = 0; n < 10;n++)
				if(m == (int)Y[n])//字符经过强制类型转换得到的是ascii码,
				//故m取48-57  这个(int) 可以【省略】! 
				{
					k++;
					break;//这break不可无(避免重复数计入)  否则所有数都将输出 
				}
		if(k == 10)
		printf("%d",i);
	}
	return 0;	
} 
//最后输出结果是69 

如果觉得一开始人为定47-99麻烦,也可以肆意地定到1-100,前面加一个判断,判断平方和立方共是10位再作下面的代码即可,如果不是10位就直接break。(数组长度要扩大些防止放不下)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晨风默语

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值