2017年5月25日 星期四

[Uva]1225 - Digit Counting

[Uva]1225 - Digit Counting

這也是2017/5/23的CPE第一題考題

中文大意
第一行輸入一個測試次數 time
給一個整數N(範圍:1< N <10000)
假設N = 13
請計算出0 ~ 9出現的次數
N = 13 => 12345678910111213
要統計的數字    0   1   2   3   4   5   6   7   8   9
出現次數            1   6   2   2   1   1   1   1   1   1

N = 24  => 123456789101112131415161718192021222324
要統計的數字    0   1   2   3   4   5   6   7   8   9
出現次數            2  13  8   3   3   2   2   2   2   2

為了計算數量所以宣告一個 arrcount 的陣列
每統計完一個N後要記得歸零陣列,不然數字會一直往上加喔

程式碼如下
import java.util.*;
import java.lang.*;

public class DigitCounting {

public static void main(String[] args) {
int N ; //待測數字
int time;  //測試次數
long arrcount[] = new long[10];  //統計數量的陣列

Scanner sc = new Scanner(System.in);
time = sc.nextInt();  //輸入次數
for(int i = 0;i < time;i++)
{
N = sc.nextInt(); //輸入待測數字
if(N > 1 && N < 10000)  //判斷N是否在範圍內
{
for(int j = 1;j <= N;j++)
                                //開始計算數量,從1開始,每個數的個位、十位、百位...分開統計
{
if(j < 10)
{
arrcount[j]++;
}
if(j >= 10 && j < 100)
{
arrcount[j/10]++;
arrcount[j%10]++;
}
if(j >= 100 && j < 1000)
{
arrcount[j/10/10]++;
arrcount[j/10%10]++;
arrcount[j%10]++;
}
if(j >= 1000 && j < 10000)
{
arrcount[j/1000]++;
arrcount[j/100%10]++;
arrcount[j/10%10]++;
arrcount[j%10]++;
}

}
for(int k = 0;k < arrcount.length;k++)
                                 //輸出陣列中統計完的結果
{
if(k == (arrcount.length-1))
{
System.out.println(arrcount[k]);
                                                //最後一個數字要換行
}
else
{
System.out.print(arrcount[k] + " ");
                                                //每個數字之間要留空白
}
}

for(int x = 0;x < arrcount.length;x++)  //陣列歸零
{
arrcount[x] = 0;
}
}
}
}
}


沒有留言:

張貼留言