Sample Input
2
10 8 12 13 15 13 13 16 9
11 18 24 21 23 23 23 13 15
17 33 21 23 27 26 27 19 4
22 18 30 30 24 16 26 21 21
5
98329921
12345
800348
14
873645
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
4
0
1
10
100
Output for Sample Input
Case 1:
Cheapest base(s) for number 98329921: 24
Cheapest base(s) for number 12345: 13 31
Cheapest base(s) for number 800348: 31
Cheapest base(s) for number 14: 13
Cheapest base(s) for number 873645: 22
Case 2:
Cheapest base(s) for number 0: 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
Cheapest base(s) for number 1: 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
Cheapest base(s) for number 10: 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
Cheapest base(s) for number 100: 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
大意:給一數字 求耗費最低的進制數字
解法:borce
import java.util.Scanner;
public class UVA11005 {
public static int value[] = new int[36];
public static int store_result[] = new int[36];
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int count = sc.nextInt();
for (int c = 1; c <=count; c++) {
if(c!=1)System.out.println();
System.out.println("Case "+c+":");
int j = 0, number = 0;
for (j = 0; j < 36; j++) {
value[j] = sc.nextInt();
}
number = sc.nextInt();
for (int n = 0; n < number; n++)
{
int cheap = Integer.MAX_VALUE;
int num = sc.nextInt();
System.out.print("Cheapest base(s) for number "+num+":");
for (int divisor = 1; divisor < 36; divisor++) {
store_result[divisor] = cal(divisor + 1, num);
if (store_result[divisor] < cheap) {
cheap = store_result[divisor];
}
}
for (int i = 1; i < 36; i++) {
if (cheap == store_result[i])
{
System.out.print(" "+(i + 1));
}
}
System.out.println();
}
}
}
sc.close();
}
public static int cal(int divisor, int num) {
int cal_value = 0;
while (true) {
if(num==0)break;
cal_value += value[num % divisor];
num /= divisor;
}
return cal_value;
}
}