用C语言编程:班里来了一名新同学,很喜欢学数学,同学们问他年龄的时候,他向大家说:我的年龄的平方是

用C语言编程:班里来了一名新同学,很喜欢学数学,同学们问他年龄的时候,他向大家说:我的年龄的平方是个三位数,立方是个四位数,四次方是个六位数,三次方和四次方正好用遍0、1、2、3、4、5、6、7、8、9、这10个数字,那么大家猜猜我今年多少岁?

年龄:18

代码:

#include<stdio.h>
#include<math.h>//pow(x,y) x的y次方

//判断数组a中的所有数字是否有相同的
//numOfWeiShu : array length
int check_arr(int a[],int numOfWeiShu){
  int i = 0, j = 0;
  for ( i = 0; i < numOfWeiShu ; i ++){
    for ( j = i + 1; j < numOfWeiShu ; j ++){
      if ( a[i] == a[j]){
        return -1;
      }
    }
  }
  return 1;
}

//判断n位数是否满足条件:每个位上的数字都各不相同
//21345满足条件,21315不满足条件
//numOfWeiShu : 位数
int check_if_right(int num,int numOfWeiShu){
  int a[numOfWeiShu], i = 0, j = 0;
  for ( ; i < numOfWeiShu ; i ++){
    a[i] = num /  (int)pow((double)10 , (numOfWeiShu - i - 1));
    a[i] = a[i] % 10;
  }
  return check_arr(a,numOfWeiShu);
}

//判断num是否n位整数:1234 是 4位整数, 231245 是 6位整数,123不是4位整数,12345不是6位整数
int check_is_n(int num,int n){
  int a = 1;
  a = (int)pow((double)10,n - 1) ;
  if( (num / a) > 9 || (num / a) < 1){
    return -1;
  }
  else{
    return 1;
  }
}

int getAge(){
  int i=0,j=0;
  int num2 = 9,num3 = 0,num4 = 0;//年龄的2次方、3次方、4次方
  //double num5 = 0; //年龄的3次方、4次方拼接起来 num5 = num3 * 1000000 + num4;
  int arr[10];
  for ( i = 11; i < 32; i ++){
    num2 = (int)pow((double)i,2);
    if (check_is_n(num2,3) == 1){//年龄的2次方是3位数
      num3 = (int)pow((double)i,3);
      //年龄的3次方是4位数 && 该数的每个位置上的数字不重复
      if ( check_is_n(num3,4) == 1 && check_if_right(num3,4) == 1){
        num4 = (int)pow((double)i,4);
        if ( check_is_n(num4,6) == 1 && check_if_right(num4,6) == 1){
          //printf("%d\t%d\t%d\n",i,(int)pow((double)i,3),(int)pow((double)i,4));
          
          //把年龄的3次方、4次方两个数字所有位数放一起检查有无重复的数字出现,没有则找到了正确的年龄
          for(j = 0; j < 4; j ++){
            arr[j] = num3 / (int)pow((double)10,4 - j - 1);
            arr[j] = arr[j] % 10;
          }
          for(j = 0; j < 6; j ++){
            arr[j+4] = num4 / (int)pow((double)10,6 - j - 1);
            arr[j+4] = arr[j+4] % 10;
          }
          if (check_arr(arr,10) == 1){
            return i;
          }
        }
      }
    }
  }
  return -1;
}

int main(){
  printf("age:%d\n",getAge());
  return 0;
}

运行结果:

年龄       年龄立方   年龄4次方

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-08-09
13
相似回答