Q:2 3 5 10 12 13 来自Ctrl CV
题目链接
-
Q
package praxis; import org.junit.Test; public class Week1_1 { //per-second private final int consume = 600; //per-min private final int recover = 300; //per-min private int energy = 10000; //total public int zeroTime(){ int count = 0; while (energy > consume){ energy -= consume - recover; count++; } return (int)(energy * 60.0 / consume) + count * 2 * 60; } @Test public void testZT(){ System.out.println(zeroTime()); //3880 } }
-
Q
package praxis; //thinkyourself public class Week1_2 { public static void main(String[] args) { // 正约数和 参考每个唯一分解定理 // 我们把100阶层已知的因子进行拆分 // 然后对各个质因数量求和 long ans = 1; int[] t = new int[101]; for (int i = 2; i <= 100; i++) { int n = i; // 求出这个数字的所含各个质因数的个数 // 循环进去说明他不是一个合数 我们需要继续拆分 for (int j = 2; j <= n / j; j++) while (n % j == 0) { t[j]++; n /= j; } if (n > 1) t[n]++; // 如果n的值没有改变说明本身是一个质数 // 还有一层含义 当n最后出来但它本身是一个质数 因子 } for (int i = 2; i <= 100; i++) { if (t[i] != 0) ans *= (t[i] + 1); // 公式 } System.out.println(ans); } }
-
Q
package praxis; import java.math.BigInteger; import org.junit.Test; //thinkyourself //卡特兰数(Catalan number) public class Week1_3 { private final int num = 16; //车数 @Test public void arrangement() { //Catalan数推导式 BigInteger res = factorial(num + 1, 2 * num). divide(factorial(1, num)). divide(BigInteger.valueOf(num + 1)); System.out.println(res); } public static BigInteger factorial(int start,int end) { BigInteger res = BigInteger.valueOf(1); for(int i = start;i <= end;i++) { res = res.multiply(BigInteger.valueOf(i)); } return res; } }
-
Q
package praxis; import java.util.ArrayList; import org.junit.Test; public class Week1_4 { private final int num = 10000; ArrayList<Integer> list = new ArrayList<>(); //存较小素数方案 @Test public void maxPrime() { //对每个偶数求加数 for(int i = 4;i < num;i += 2) { for(int j = 2;j <= i/2;j++) { //从小到大,如果有合适的,记录 if(isPrime(j) && isPrime(i - j)) { list.add(j); break; } } } //求较小素数方案中最大的素数 int res = 1; for(int e :list) { res = Math.max(res, e); } System.out.println(res); } public static boolean isPrime(int num) { if (num <= 3) { return num > 1; } if (num % 6 != 1 && num % 6 != 5) { return false; } int sqrt = (int) Math.sqrt(num); for (int i = 5; i <= sqrt; i += 6) { if (num % i == 0 || num % (i + 2) == 0) { return false; } } return true; } }
-
Q
package praxis; //thinkyourself public class Week1_5 { public static void main(String[] args) { int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; fullSort(arr, 0, arr.length - 1); System.out.println(res); } static int res = 0; static void fullSort(int[] arr, int start, int end) { // 递归终止条件 if (start == end) { // 求出了全排列的一种情况,然后检查是否满足条件 if (check(arr)) res++; return; } for (int i = start; i <= end; i++) { swap(arr, start, i); fullSort(arr, start + 1, end); swap(arr, start, i); } } private static void swap(int[] arr, int i, int j) { int tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; } static boolean check(int[] arr) { for (int i = 1; i < arr.length; i++) { if (Math.abs(arr[i] - arr[i - 1]) == 1) return false; } return true; } }
-
Q
package praxis; import org.junit.Test; public class Week1_6 { //x%5 == 1 ==> (x-1)*4/5 = y //y%5 == 2 ==> (y-2)*4/5 = z //z%5 == 3 ==> (z-3)*4/5 = w //w%5 == 4 ==> (w-4)*4/5 = n //n%5 == 0 @Test public void findOriginal() { for(int i = 1;i < Integer.MAX_VALUE;i++) { int x = i; if(x%5 == 1) { int y = hideFun(i - 1); if(y != -1 && y%5 == 2) { int z = hideFun(y - 2); if(z != -1 && z%5 == 3) { int w = hideFun(z - 3); if(w != -1 && w%5 == 4) { int n = hideFun(w - 4); if(n != -1) { System.out.println(i); break; } } } } } } } //求下次看到的数量 public int hideFun(int num) { int ret = -1; double temp = num*0.8; return num*4/5 == Math.round(temp)?(int)Math.round(temp):ret; } }
-
Q
package praxis; import java.util.HashMap; import java.util.Map; import org.junit.Test; public class Week1_7 { private HashMap<Integer,Integer> map = new HashMap<>(); public static int[] produce(){ int[] fraction = new int[2]; fraction[0] = (int)(Math.random() * 101); fraction[1] = 100; do { fraction[1] = (int)(Math.random() * 101); }while(fraction[1] < fraction[0]); return fraction; } public int[] slight(int up,int down) { boolean tag = false; //削分子 for(int i = up;i > 0;i--) { if(isPrime(i)) { //加分母 if(!tag) { for(int j = down;j < 101;j++) { if(isPrime(j)) { map.put(i, j); tag = true; break; } } } //减分母(此步易漏) for(int j = down;j > 0;j--) { if(isPrime(j) && i*1.0/j < up*1.0/down) { map.put(i, j); } } } } int[] res = {0,1}; for(Map.Entry<Integer, Integer> entry : map.entrySet()) { if(entry.getKey()*1.0/entry.getValue() > res[0]*1.0/res[1]) { res[0] = entry.getKey(); res[1] = entry.getValue(); } } return res; } @Test public void test() { for(int i = 1;i < 10;i++) { int[] pre = produce(); int[] res = slight(pre[0], pre[1]); System.out.println(pre[0]+ "/" + pre[1] + "\t==> " + res[0] + "/" + res[1]); } } public static boolean isPrime(int num) { if (num <= 3) { return num > 1; } if (num % 6 != 1 && num % 6 != 5) { return false; } int sqrt = (int) Math.sqrt(num); for (int i = 5; i <= sqrt; i += 6) { if (num % i == 0 || num % (i + 2) == 0) { return false; } } return true; } }
-
Q
package praxis; import org.junit.Test; public class Week1_8 { private static int COLUMN = 26; public int getOrder(int num) { // 25 -> 1 ; 27 -> 2 for(int i = 1;;i++) { if(Math.pow(COLUMN, i) >= num) { return i; } } } public void excelAddress(int input) { int order = getOrder(input); StringBuilder stringBuilder = new StringBuilder(); while(--order >= 0) { for(int i = 1;i <= 26;i++) { int temp = (int)Math.pow(COLUMN, order) * i; int temp2 = (int)(1.0 * COLUMN * ((1 - Math.pow(COLUMN, order))/(1 - COLUMN))); if((temp + order) >= input || (temp + temp2 >= input)){ input -= Math.pow(COLUMN, order) * i; stringBuilder.append((char)('A' + i - 1)); break; } } } System.out.println(stringBuilder.toString()); } @Test public void test() { excelAddress(2054); System.out.println("sdf"); } }
-
Q
package praxis; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import org.junit.Test; public class Week1_9 { private static SimpleDateFormat form = new SimpleDateFormat("yyyy-MM-dd"); private static Date leftBoundary; private static Date rightBoundary; { try{ leftBoundary = form.parse("1960-1-1"); rightBoundary = form.parse("2059-12-31"); }catch (Exception e) {} } public String[] format(String input) { String[] strings = new String[6]; StringBuilder bld = new StringBuilder(); strings[0] = bld.append(19).append(input.substring(0,2)).append("-"). append(input.substring(3,5)).append("-").append(input.substring(6,8)).toString(); bld.delete(0, bld.length()); strings[1] = bld.append(20).append(input.substring(0,2)).append("-"). append(input.substring(3,5)).append("-").append(input.substring(6,8)).toString(); bld.delete(0, bld.length()); strings[2] = bld.append(19).append(input.substring(6,8)).append("-"). append(input.substring(0,2)).append("-").append(input.substring(3,5)).toString(); bld.delete(0, bld.length()); strings[3] = bld.append(20).append(input.substring(6,8)).append("-"). append(input.substring(0,2)).append("-").append(input.substring(3,5)).toString(); bld.delete(0, bld.length()); strings[4] = bld.append(19).append(input.substring(6,8)).append("-"). append(input.substring(3,5)).append("-").append(input.substring(0,2)).toString(); bld.delete(0, bld.length()); strings[5] = bld.append(20).append(input.substring(6,8)).append("-"). append(input.substring(3,5)).append("-").append(input.substring(0,2)).toString(); bld.delete(0, bld.length()); return strings; } @Test public void test() { String input = "02/03/04"; conversion(input); } public void conversion(String input) { ArrayList<Date> list = new ArrayList<Date>(); for(String str : format(input)) { if(islawful(str)) { try { list.add(form.parse(str)); }catch (Exception e) {} } } list.sort((Date a,Date b) -> a.compareTo(b)); for(Date date : list) { System.out.println(form.format(date)); } } public static boolean islawful (String str) { Date date; try { date = form.parse(str); } catch (Exception e) {return false;} return (date.before(leftBoundary) || date.after(rightBoundary)) ? false : true; } }
-
Q
package praxis; import org.junit.Test; //thinkYourself public class Week1_10 { public int div(int n,int m) { if(n == 1||m == 1) return 1; else if(n < m) return div(n,n); else if(n == m) return 1+div(n,n-1); else return div(n,m-1) + div(n-m,m); } public int divideMethod(int num) { return div(num, num); } @Test public void test() { System.out.println(divideMethod(5)); } }
-
Q
package praxis; import org.junit.Test; public class Week1_11 { @Test public void getOptions() { int forward = 97; int back = 127; int step = 1; for(int i = 1;;i++) { if(((back + forward) * i + step) % forward == 0) { System.out.println(((back + forward) * i + step) / forward); break; } } } }
-
Q
package praxis; import java.util.Scanner; //thinkyourself public class Week1_12 { public static int m, n; public static int[][] value; public static int len, count = 0; public void check() { for(int i = len - 2, t = 1;i >= 0;i--, t++) for(int j = 0;j < len - t;j++) { if(value[i + 1][j] == value[i + 1][j + 1]) value[i][j] = 1; else value[i][j] = 2; } int sumA = 0, sumB = 0; for(int i = 0, t = len - 1;i < len;i++, t--) for(int j = 0;j < len - t;j++) { if(value[i][j] == 1) sumA++; else if(value[i][j] == 2) sumB++; } if(sumA == m && sumB == n) count++; } public void dfs(int step) { if(step == len) { check(); return; } else { for(int i = 1;i <= 2;i++) { value[len - 1][step] = i; dfs(step + 1); } } } public static void main(String[] args) { Week1_12 test = new Week1_12(); Scanner in = new Scanner(System.in); // m = in.nextInt(); // n = in.nextInt(); m = 1; n = 2; for(int i = 1;i < 100;i++) { int a = (i + 1) * i / 2; if(a == m + n) { len = i; value = new int[a][a]; break; } } test.dfs(0); System.out.println(count); } }
-
Q
package praxis; import java.util.HashSet; import org.junit.Test; //thinkyourself public class Week1_13 { public static int sum = 0; public void swap(int[] A, int i, int j) { int temp = A[i]; A[i] = A[j]; A[j] = temp; } public void dfs(int[] A, int step) { if(step == A.length) { int[] count = new int[7]; count[0] = A[0] + A[1] + A[2] + A[3]; count[1] = A[0] + A[4] + A[6] + A[9]; count[2] = A[1] + A[4] + 6 + 14; count[3] = A[2] + A[5] + 6 + 11; count[4] = A[6] + A[8] + A[10] + 14; count[5] = A[7] + A[8] + A[9] + 11; count[6] = A[3] + A[5] + A[7] + A[10]; HashSet<Integer> set = new HashSet<Integer>(); for(int i = 0;i < 7;i++) set.add(count[i]); if(set.size() == 1) { for(int i = 0;i < A.length;i++) System.out.print(A[i]+" "); System.out.println(); } sum++; return; } else { for(int i = step;i < A.length;i++) { swap(A, i, step); dfs(A, step + 1); swap(A, i, step); } } } @Test public void heptagon() { int[] A = {1,2,3,4,5,7,8,9,10,12,13}; //10 3 9 8 dfs(A, 0); System.out.println(sum); } }