多少个2

题目:1到2020里面有多少个2

代码:

package shousuan;

import java.util.Arrays;

public class 多少个2 {
    public static void main(String[] args) {
        //初始化数组
        int size = 2020;
        int [] num = new int[ size];
        for (int i = 0; i < size ; i++){
            num[i] = i+1;
        }
//        System.out.println(Arrays.toString(num));
        //转为字符串再输出
        //计算包含数字2的元素个数
        int count = 0;
        for (int i = 0; i < size; i++) {
            int currentNum = num[i];
            while (currentNum > 0) {
                if (currentNum % 10 == 2) {
                    count++;
                }
                currentNum /= 10;
            }
        }

        System.out.println("数组中包含数字2的元素个数为:" + count);
    }
}

excel

填充2020个数字 然后找到替换 点全部替换

image-20240226201652950

image-20240226201533046

image-20240226201714785

卡片

【题目描述】

小蓝有很多数字卡片,每张卡片上都是数字0 到9。
小蓝准备用这些卡片来拼一些数,他想从1 开始拼出正整数,每拼一个,就保存起来,卡片就不能用来拼其它数了。
小蓝想知道自己能从1 拼到多少。
例如,当小蓝有30 张卡片,其中0 到9 各3 张,则小蓝可以拼出1 到10,但是拼11 时卡片1 已经只有一张了,不够拼出11。
现在小蓝手里有0 到9 的卡片各2021 张,共20210 张,请问小蓝可以从1拼到多少?
提示:建议使用计算机编程解决问题。

【答案】:3181

【题解】:0-9的卡片每个数字有2021张,从1开始遍历,每遍历到一个数字,这个卡片数字的个数就-1,如果某一个数字的卡片没有了,就遍历结束了。

import java.util.Arrays;

public class Main {
    static int a[] = new int[10];//0-9
    public static void main(String[] args) {
        Arrays.fill(a, 2021);//每个数初始值为2021
        int ans = 0;
        for(int i = 1; i <= 20210; i++) {
            int t = i;
            while(t > 0) {
                int s = t % 10;
                t /= 10;
                a[s]--;
                //注意:这里不是==0,上面a[s]--,减了一次才为0,说明这次没减之前为1,还有最后一个数,
                //如果为0,-1就会小于0,说明这个数2021张牌都用完啦
                
            if(a[s] < 0) {
                ans = i-1; //当前遍历的这个数肯定没有遍历完,故遍历到这个数的前一个
                break;
            }
        }
        if(ans != 0)	break;
    }
    System.out.println(ans);
}
}