import junit.framework.Assert; import org.junit.Test; public class Quiz { private int index = 0; private int value = 0; public int oneCount(int n) { if(n <= 0) { return 0; } boolean result = true; int sum = 0; while(result) { sum += n % 10 == 1 ? 1 : 0; n = n / 10; result = n > 0 ? true : false; } return sum; } public int f(int n) { int result = 0; for(int i = n; i > 0 ; i--) { result += oneCount(i); if(index == n - 1) { result += value; break; } } index = n; value = result; return result; } @Test public void testOneCount() { Assert.assertEquals(1, oneCount(1)); Assert.assertEquals(0, oneCount(2)); Assert.assertEquals(0, oneCount(9)); Assert.assertEquals(1, oneCount(10)); Assert.assertEquals(0, oneCount(999)); Assert.assertEquals(3, oneCount(111)); Assert.assertEquals(1, oneCount(100)); Assert.assertEquals(0, oneCount(200)); Assert.assertEquals(1, oneCount(1234567890)); Assert.assertEquals(0, oneCount(9368)); } @Test public void testF() { Assert.assertEquals(1, f(1)); Assert.assertEquals(7, f(14)); Assert.assertEquals(199981, f(199981)); } @Test public void testFindValue() { int index = 2; while(f(index) != index) { index++; if(index == 1000000) { index = -1; break; } } System.out.println(index); } }