Java必做算法题-输入两个数字(如12、78),计算两个数字之间 0-9 数字出现的次数


输入两个数字(如12、78),计算两个数字之间 0-9 数字出现的次数

题目的意思是,要把12和78之间出现的数,拆分成0-9,然后统计0-9出现的次数


12和78之间有,13,14,15,16,17……75,76,77。然后把每个数拆开,统计0到9出现的次数例如,13,1出现1次,3出现一次,到14的时候,1出现2次,3出现1次,4出现1次,以此类推最后统计0-9一共出现的次数

一、解题思路

第一步 我们首先要考虑两个数之间一共有几个数,例如:1-4之间有2个数,2和3,
3-9之间有4,5,6,7,8五个数 ,以此我们得到一个公式,a-b-1得到的结果就是有几个数,4-1-1=2
9-3-1=5
第二步拆分之间出现的每一个数,13要拆成1和3,133拆成1和3和3,6789要拆成6,7,8,9,这个要怎么做呢,我们要怎么统计每个数是几位数呢?从而拆分在统计0-9的次数呢?

二、计算两个数之间有多少个数

1.利用公式,a-b-1=两个数之间的个数

想要判断2个数那个数更大,就放在前面作为被减数

代码如下(示例):

		if (one > two) {
            int demp = one;
            one = two;
            two = demp;
        }
         //a,b中间有几个数
        int demp = two - one - 1;//例如,1和3中间只有一个数2,所以减一

2.创建一个用来存放0-9出现次数的数组,长度为10

数组的索引0的位置用来存放0出现的次数
索引1的位置用来存放1出现的次数,以此类推
数组最后一位索引9,用来存放9出现的次数

代码如下(示例):

 int[] countArray = new int[10];//用来存储0-9的次数

3.for循环,提取2个数之间出现的数

代码如下(示例):

  for (int i = 1; i <= demp; i++) {	//demp是2个数之间一共有几位数
    int three = one + i;  //13=12+1;14=12+2’;
  }

3.在for循环里嵌套for,来拆分每个数并统计在0-9的数组里面

代码如下(示例):

  for (int i = 1; i <= demp; i++) {	//demp是2个数之间一共有几位数
    int three = one + i;  //13=12+1;14=12+2’;
    String s = String.valueOf(three);//由于数是int,我们要转为String类型的,方便拆分
      for (int a = 0; a < s.length(); a++) { //用来拆分每位数
         //countArray索引0是用来存储 0 出现的次数.
           String s1 = String.valueOf(s.charAt(a)); //char提取每个位数转为Sting类型的
            countArray[Integer.parseInt(s1)] = countArray[Integer.parseInt(s1)] + 1;
            
         }
  }

int不能直接拆分出每个数,所以 我们要利用String的charAt( )方法,所以我们先要转为String,然后在使用charAt()方法提出每个字符char,char不能直接转为int,所以char转为String,然后String转为int,最后存到0-9的数组里面

完整代码

 public class Task1217_4 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入第一个数:");
        int a = sc.nextInt();
        System.out.println("请输入第二个数:");
        int b = sc.nextInt();
        count(a, b);
    }
    //循环计算0-9出现的次数
    public static void count(int one, int two) {
        int[] countArray = new int[10];//用来存储0-9的次数
        //判断第一个数是否大于第二个数,大于互换位置
        if (one > two) {
            int demp = one;
            one = two;
            two = demp;
        }
        //a,b中间有几个数
        int demp = two - one - 1;//例如,1和3中间只有一个数2,所以减一
        for (int i = 1; i <= demp; i++) {
            int three = one + i;
            String s = String.valueOf(three);
            for (int a = 0; a < s.length(); a++) {
                //countArray索引0是用来存储 0 出现的次数.
                String s1 = String.valueOf(s.charAt(a));
                countArray[Integer.parseInt(s1)] = countArray[Integer.parseInt(s1)] + 1;
            }
        }
        for (int i = 0; i < countArray.length; i++) {
            System.out.println(i + "出现的次数:" + countArray[i]);
        }
    }
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值