1 条题解
-
0
方法思路
通过分析参考代码,我发现题目的关键点在于:将数字变成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
- 上传者