1 条题解

  • 0
    @ 2025-7-15 18:38:24

    方法思路

    通过分析参考代码,我发现题目的关键点在于:将数字变成0最少需要几步操作。如果每次都选择删除一个非0位,那么每个数字需要的步数就等于它包含的非0位的个数。

    例如:

    • 对于10,只有一个非0位(1),删除1后变成0,需要1步
    • 对于13,有两个非0位(1和3),需要2步
    • 对于22,有两个非0位(2和2),需要2步
    • 对于100,有一个非0位(1),需要1步
    • 对于30,有一个非0位(3),需要1步

    总共需要1+2+2+1+1=7步,与示例输出一致。

    代码实现

    Java
    import java.io.*;
    
    public class Main {
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            StreamTokenizer in = new StreamTokenizer(br);
            PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
            
            while (in.nextToken() != StreamTokenizer.TT_EOF) {
                int n = (int) in.nval;
                int[] arr = new int[n];
                
                for (int i = 0; i < n; i++) {
                    in.nextToken();
                    arr[i] = (int) in.nval;
                }
                
                int ans = 0;
                for (int i = 0; i < n; i++) {
                    ans += countNotZero(arr[i]);
                }
                
                out.println(ans);
            }
            
            out.flush();
            out.close();
            br.close();
        }
        
        public static int countNotZero(int num) {
            int count = 0;
            while (num != 0) {
                if (num % 10 != 0) {
                    count++;
                }
                num /= 10;
            }
            return count;
        }
    }
    
    
    Python
    def count_not_zero(num):
        count = 0
        while num != 0:
            if num % 10 != 0:
                count += 1
            num //= 10
        return count
    
    n = int(input())
    arr = list(map(int, input().split()))
    
    ans = 0
    for num in arr:
        ans += count_not_zero(num)
    
    print(ans)
    
    
    C++
    #include <iostream>
    using namespace std;
    
    int countNotZero(int num) {
        int count = 0;
        while (num != 0) {
            if (num % 10 != 0) {
                count++;
            }
            num /= 10;
        }
        return count;
    }
    
    int main() {
        int n;
        cin >> n;
        
        int ans = 0;
        for (int i = 0; i < n; i++) {
            int num;
            cin >> num;
            ans += countNotZero(num);
        }
        
        cout << ans << endl;
        return 0;
    }
    
    
    • 1

    信息

    ID
    85
    时间
    1000ms
    内存
    256MiB
    难度
    5
    标签
    递交数
    1
    已通过
    1
    上传者