欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

第十届蓝桥杯 JavaB组 试题 F: 特别数的和

程序员文章站 2022-07-06 21:11:25
...
						 试题 F: 特别数的和 

				时间限制: 1.0s 内存限制: 512.0MB 本题总分:15 分
【问题描述】 小明对数位中含有 2、0、1、9 的数字很感兴趣(不包括前导 0),在 1 到 40 
中这样的数包括 1、2、9、10 至 32、39 和 40,共 28 个,他们的和是 574。 请问,在 1 
到 n 中,所有这样的数的和是多少?
【输入格式】
	输入一行包含两个整数 n。
【输出格式】
	输出一行,包含一个整数,表示满足条件的数的和。
【样例输入】 
	40
【样例输出】 
	574
【评测用例规模与约定】 
	对于 20% 的评测用例,1≤n≤10。 
	对于 50% 的评测用例,1≤n≤100。 
	对于 80% 的评测用例,1≤n≤1000。 
	对于所有评测用例,1≤n≤10000。

思路:只要是符合有2 0 1 9这四位数字的数都进行相加,那么我们可以将用第一次循环将每个数都变成字符串类型,然后再将它们分割并存入数组中,最后再将数组的数进行循环,如果找到有就进行相加,没有就进行下一次循环。

这个是我在考场上的时候自己写的,我自己也不知道代码能不能全对,毕竟我学的还很少,不过样例上的输出出来了。仅供参考吧,我的思路应该可以吧。

import java.util.Scanner;

public class 特别数的和 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int temp = 0;
		for(Integer i=1;i<=n;i++) {	//第一次循环
			String s = i.toString();	//将整形 i 变成字符型的 s 
			String[] st = s.split("");	//将字符串类型的s进行分割
			for(int j=0;j<st.length;j++) {	//第二次循环,主要是将数组进行遍历,提示查询是否含有2 0 1 9这四位数
				if(st[j].equals("2")) {	//判断是否为所要查询的数
					temp += i;
					break;	//这里如果不跳出循环,有可能会加两次,比如10 在 1 处判断一次,在 0 出又进行了一次判断,等于多加了一次10
				}
				if(st[j].equals("0")) {
					temp += i;
					break;
				}
				if(st[j].equals("1")) {
					temp += i;
					break;
				}
				if(st[j].equals("9")) {
					temp += i;
					break;
				}
			}
		}
		System.out.println(temp);
	}
}
相关标签: 特别数的和