Работает, но пока не все тесты проходит
| Код | import java.util.List;
import static org.junit.Assert.*; import org.junit.Test;
public class CoinsCounterTest {
@Test public void test0() { List<String> options = CoinsCounter.getOptions(0); assertEquals(0, options.size()); }
@Test public void test1() { List<String> options = CoinsCounter.getOptions(1); assertEquals(1, options.size()); assertEquals("1", options.get(0)); }
@Test public void test2() { List<String> options = CoinsCounter.getOptions(2); assertEquals(2, options.size()); assertTrue(options.contains("1+1")); assertTrue(options.contains("2")); }
@Test public void test5() { List<String> options = CoinsCounter.getOptions(5); // assertEquals(4, options.size()); assertTrue(options.contains("1+1+1+1+1")); assertTrue(options.contains("2+2+1")); assertTrue(options.contains("5")); assertTrue(options.contains("2+1+1+1")); }
@Test public void test14() { List<String> options = CoinsCounter.getOptions(14); // assertEquals(4, options.size()); assertTrue(options.contains("1+1+1+1+1+1+1+1+1+1+1+1+1+1")); assertTrue(options.contains("2+2+2+2+2+2+2")); assertTrue(options.contains("5+5+2+2")); assertTrue(options.contains("10+2+2"));
assertTrue(options.contains("5+2+2+2+2+1")); assertTrue(options.contains("5+2+2+2+1+1+1")); assertTrue(options.contains("5+2+2+1+1+1+1+1")); assertTrue(options.contains("5+2+1+1+1+1+1+1+1")); assertTrue(options.contains("5+1+1+1+1+1+1+1+1+1")); } }
|
| Код | import java.util.ArrayList; import java.util.Arrays; import java.util.List;
public class CoinsCounter { private static List<Integer> coins = Arrays.asList(50, 25, 10, 5, 2, 1);
public static List<String> getOptions(int sum) { List<String> result = new ArrayList<String>();
for (int coin : coins) { result.addAll(check(sum, coin)); }
return result; }
private static List<String> check(int sum, int coin) { List<String> result = new ArrayList<String>();
String option = ""; if (coin > 0) { int count = calculate(coin, sum); if (count > 0) { option = join(coin, count); if (count * coin < sum) { for (String item : getOptions(sum - (count * coin))) { result.add(option + "+" + item); } } else { if (!option.isEmpty()) { result.add(option); } } } } return result; }
public static int calculate(int coin, int sum) { return sum / coin; }
private static String join(int coin, int count) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < count; i++) { sb.append("+").append(coin); } if (sb.length() > 0) { sb.deleteCharAt(0); }
return sb.toString(); } }
|
|