關於521

關於521

時間限制:1000 ms  |  內存限制:65535 KB
難度:2
描述

Acm隊的流年對數學的研究不是很透徹,但是固執的他還是想一頭扎進去。

瀏覽網頁的流年忽然看到了網上有人用玫瑰花瓣拼成了521三個數字,頓時覺得好浪漫,因爲每個男生都會不經意的成爲浪漫的製造者。此後,流年走到哪裏都能看到521三個數字,他怒了,現在他想知道在連續的數中有多少數全部包含了這三個數字。例如12356就算一個,而5111就不算。特別的,如果他看到了521三個數連續出現,會特別的憤怒。例如35210

輸入
多組測試數據:
一行給定兩個數a,b(0<a,b<1000000),表示數字的開始和結束。
輸出
一行顯示他想要知道的數有幾個及顯示有多少個數字令他特別的憤怒。用空格隔開。
樣例輸入
200 500
300 900
1 600
樣例輸出
Case 1:2 0
Case 2:2 1
Case 3:6 1
來源
流年
上傳者
ACM_安鵬程


 

未通過代碼:

暈!哪兒有錯?!

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;
	}
}

 

發佈了145 篇原創文章 · 獲贊 27 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章