已知美女年龄的3次方是4位数,4次方是6位数,年龄的3次方和4次方刚好用尽了0~9的10个数据,求美女的年龄。
提示:在某一个年龄范围内查找满足条件的年龄数据
注意:0~9刚好10个数字,也就是每个数字只能用1次。
思路:
1.选定一个合适的年龄范围 10~50
2. 计算年龄的3次方和4次方,将数据进行分离,进行冒泡排序
3.检查数据是否在0~9且每个数字仅出现一次 ,检查数组下标与分离的数据是否相等
4.输出结果
运行效果:
代码展示:
#include<stdio.h>
#include<math.h>
//冒泡排序
void maopao(int arr[],int size)
{
int i,j,temp;
//轮数,0 ~ 总个数-1
for (i = 0; i < size-1; i++)
{
//比较相邻的元素,0 ~ 总个数-1-当前第几轮的轮数
for(j = 0; j < size-1-i; j++)
{
if(arr[j] > arr[j+1])
{
// 交换相邻的元素
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
int main(void)
{
int age;
int arr[10];
int n,m,i=0;
//假设年龄在10到50之间
for(age = 10; age <= 50; age++)
{
n = pow(age,3);
m = pow(age,4);
//数据分离---三次方
while(n>0)
{
arr[i++] = n % 10;
n /= 10;
}
//分离四次方
while(m>0)
{
arr[i++] = m % 10;
m /= 10;
}
//进行冒泡排序
maopao(arr,10);
//遍历下标和数组
for(i=0;i<10;i++)
{
if(arr[i]!=i)
{
break;
}
}
if (i==10)
{
printf("美女的年龄是: %d\n", age);
break;
}
}
return 0;
}