网站页面设计工具,私人定制网站建设,浙江省信息港成绩查询,微信小程序后台一、问题描述 班里转来了一位新同学#xff0c;他在介绍自己年龄的时候说#xff1a;“我的年龄的平方是一个三位数#xff0c;立方是一个四位数#xff0c;四次方是一个六位数。三次方和四次方正好将0/1/2/3/4/5/6/7/8/9这10个数字全部覆盖。”#xff0c;那么#xff0…一、问题描述 班里转来了一位新同学他在介绍自己年龄的时候说“我的年龄的平方是一个三位数立方是一个四位数四次方是一个六位数。三次方和四次方正好将0/1/2/3/4/5/6/7/8/9这10个数字全部覆盖。”那么该同学今年多大 二、算法思想 首先将年龄的大致范围确定下来因为17的四次方是83521小于六位数22的三次方是10648大于四位数因此该同学的年龄范围是大于17而小于22。然后将17~22之间的数进行列举将计算得到的四位数和六位数的每位数字分别存放于数组中再判断是否有重复或者部分数字未出现最后将运算出的结果全部输出即可。 补充 我之前的想法是将三次方m的各位数放在一个数组a中四次方n的各位数放在另一个数组b中然后两重循环比较这两个数组是否有相同的数字一旦发现一个相同的数字则说明本次的年龄x不符合题意寻找下一个x。但是这个想法是错的因为没有考虑到三次方m中或四次方n中它们本身会有相同的数字出现例如20的四次方是160000。 三、程序代码 #include stdio.h int main(){long m, n, a[10] {0}, b[10] {0};int x18, i, j;do{m x*x*x; //计算立方并入数组a中 for(i3; i0; i--){a[i] m%10;m m/10;}n x*x*x*x; //计算四次方放入数组a中注意下标 for(i9; i4; i--){a[i] n%10;n n/10;}//统计每个数字出现的次数 for(i0; i10; i){b[a[i]] ;}//如果0~9每个数字都只出现一次那么输出此时的x即为该同学的年龄 for(i0; i10; i){if(b[i] 1){if(i 9){printf(\n%The age is %ld\n\n, x);}}elsebreak;}x ;//继续讨论 }while(x22);return 0;
} 四、运行结果 转载于:https://www.cnblogs.com/IronLavender/p/6817450.html