第十届蓝桥杯 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);
}
}
上一篇: 谁这么缺德害我撞车了!
下一篇: jQuery实现的简单无刷新评论功能示例