關於521
- 描述
-
Acm隊的流年對數學的研究不是很透徹,但是固執的他還是想一頭扎進去。
瀏覽網頁的流年忽然看到了網上有人用玫瑰花瓣拼成了521三個數字,頓時覺得好浪漫,因爲每個男生都會不經意的成爲浪漫的製造者。此後,流年走到哪裏都能看到5、2、1三個數字,他怒了,現在他想知道在連續的數中有多少數全部包含了這三個數字。例如12356就算一個,而5111就不算。特別的,如果他看到了521三個數連續出現,會特別的憤怒。例如35210。
未通過代碼:
暈!哪兒有錯?!
import java.util.Scanner;
public class Main {
static int SUM[] = new int [75000];
static int NUM[] = new int[4000];
static {
int sum=0,num=0;
StringBuffer s;
for(int i=125;i<=1000005;i++){
s = new StringBuffer(String.valueOf(i));
if(s.indexOf("1")!=-1 && s.indexOf("2")!=-1 &&s.indexOf("5")!=-1){
SUM[sum++] = i;
if(s.indexOf("521")!=-1){
NUM[num++] = i;
}
}
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int c=0;
while(sc.hasNext()){
c++;
int n =sc.nextInt();
int m =sc.nextInt();
int A=0,B=0;
for(int i=0;i<75000&&SUM[i]<=m;i++)
if(SUM[i]>=n)
A++;
for(int i=0;i<4000&&NUM[i]<=m;i++)
if(NUM[i]>=n)
B++;
System.out.println("Case "+c+":"+A+" "+B);
}
}
}
AC代碼:
類似貪心
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int num[] = new int[1000005];
int num1[] = new int[1000005];
for (int i = 125; i < 1000005; i++) {
int c = panduan(i + "");
if (c == 1) {
num[i] = num[i - 1] + 1;
num1[i] = num1[i - 1];
} else if (c == 2) {
num[i] = num[i - 1] + 1;
num1[i] = num1[i - 1] + 1;
} else {
num[i] = num[i - 1];
num1[i] = num1[i - 1];
}
}
int e = 1;
while (input.hasNext()) {
int a = input.nextInt();
int b = input.nextInt();
if (a < 2)
a = 2;
if (b < 125)
b = 3;
System.out.println("Case " + (e++) + ":" + (num[b] - num[a - 1])
+ " " + (num1[b] - num1[a - 1]));
}
}
private static int panduan(String s) {
if (s.indexOf("521") != -1)
return 2;
if (s.indexOf("1") != -1 && s.indexOf("2") != -1
&& s.indexOf("5") != -1) {
return 1;
}
return 0;
}
}