题目
美国数学家维纳(N.Wiener)智力早熟,11 岁就上了大学。他曾在 1935~1936 年应 邀来中国清华大学讲学。一次,他参加某个重要会议,年轻的脸孔引人注目。于是 有人询问他的年龄,他回答说:“我年龄的立方是个 4 位数。我年龄的 4 次方是个 6 位数。这 10 个数字正好包含了从 0 到 9 这 10 个数字,每个都恰好出现 1 次。” 请你推算一下,他当时到底有多年轻。
解决方案:flag标记法
空间复杂度:20
时间复杂度:o(n)
首先对题目进行分析:年龄的立方是4位数,可以确定扫描的下限是11
之后便是通过简单的定性,确定满足条件的数,将数的每一位放进一个数组之中,最后将数组进行遍历,确定flag值,如果只出现一次就是1,数组遍历9次即可,9次都是1的就是满足条件的数.`
#include <stdio.h>
#define false 0
#define ture 1
int flag[10];
int r[10];
/***********************************************************************************
* 函 数:int test(const int *ar)
* 功 能:将r[10]进行遍历,并记录flag值,通过flag值来判断是不是目标值
* 参 数:一维数组指针
* 返 回 值:正确 1 错误0
* 说 明:本函数时间复杂度为20 空间复杂度为20
************************************************************************************/
int test( const int *ar){