1 条题解
-
1
【例50.3】 平衡数题解
1、理解题意
(搞清楚题目的意图,要我们编辑一个什么程序)
1.1 搞清楚什么是平衡数
平衡数:如果正整数 x 的每一位数字 d 恰好在 x 中出现了 d 次,则认为 x 是平衡数。 举例理解,1,22,122,221,333,1333,3133,3313,3331,22333,23233,23323等都是平衡数。
1.2 看清题目的要求
输入:l r(类型:整数,范围:1<=l<=r<=10000) 输出:l-r直接所有平衡数的和。
样例输入: 1--->l 25--->r 样例输出: 因为1-25之间有两个平衡数,1和22 所以输出:23
2、设计算法
2.1 定义变量 2.2 变量初始化 2.3 输入起点和终点 2.4 给要计算的数组赋值 2.5 把要计算的数组的每个数取出来判断是不是平衡数 2.6 是平衡数累加器加上这个数
3、代码示例
#include<iostream> using namespace std; int main(){ int l,r,a,m=0;//l:要判断是不是平衡数的起点,r: 终点,a:每一次存要判断的数,m是累加器; int weishu[10],shuzu[10010]; // weishu[10]用来存每个数个十百千万位上的数字, shuzu[10010]用来保存从l到r的数字 cin >>l>>r; //输入l和r for(int i = l;i<=r;i++){ //此循环是把输入的l--->r之间的所有数字保存到shuzu[l]-- shuzu[r] shuzu[i] = i; } for(int t = l;t<=r;t++){ //此循环是把shuzu[l]-- shuzu[r]的数一个个拿出来判断是不是平衡数 int n=0; // 这个变量是用来计数数字位数的 a =shuzu[t]; for(int i = a;i!=0;i = i/10){ //循环初始值为要分解的数,循环终止条件是循环变量=0,每次循环后循环遍历除以10 n++;//每循环一次n+1 weishu[n]=i%10;// 此循环把变量a的个位存到weishu[1],十位存到weishu[2] } int yorn = 0; // 这个变量用来标记这个数是不是平衡数,0代表是。1代表不是 for(int i = 1;i<=n;i++){ int sss = 0; // 这个变量用来保存每位数在这个数字中出现的次数 for(int j = 1;j<=n;j++){ if(weishu[i] == weishu[j]){ sss++; } } if(sss != weishu[i]){ //判断每个位数在数字中出现的次数是不是等于自己 yorn = 1; break; } } if(yorn == 0){ m = m+a; } } cout<<m; return 0; }
- 1
信息
- ID
- 221
- 时间
- 1000ms
- 内存
- 64MiB
- 难度
- 7
- 标签
- 递交数
- 32
- 已通过
- 10
- 上传者