输入一个整数
代表询问的行数。
输出一个整数,代表第
行中第一个偶数出现的位置。特别地如果第
行中没有偶数,则输出
。
4
3
3
2
1
-1
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNextInt()) { int n = in.nextInt(); if (n == 1 || n == 2) { System.out.println(-1); // 前两行没有偶数 } else if (n % 2 == 1) { System.out.println(2); // n % 2余 1 时,偶数在位置2 } else if (n % 2 == 0 && n % 4 != 0) { System.out.println(4); // n是偶数但非4的倍数时,偶数在位置4 } else if (n % 4 == 0) { System.out.println(3); // n是4的倍数,偶数在位置3 } /* int maxWidth = 2*n -1; //创建并初始化杨辉三角数组(使用最大宽度),n==1000时,会出现内存溢出,使用打印功能找到规律,然后直接按照规律 输出 int[][] triangle=new int[n][maxWidth]; triangle[0][n-1]=1;//第一行中间位置为1 //生成第2行到第n行 for (int i = 1;i<n;i++){ for (int j = 0;j<maxWidth ;j++){ //上一行对应的三个位置元素之和 int left = (j-1>=0)? triangle[i-1][j-1] : 0; int center = triangle[i-1][j]; int right = (j+1<maxWidth) ? triangle[i-1][j+1] : 0; triangle[i][j] = left + center + right; } } //打印杨辉三角 for (int i = 0; i< n;i++){ for (int j = 0 ;j < maxWidth;j++){ System.out.print(triangle[i][j] + "\t" ); } System.out.println(); } //输出第n行的第一个偶数 for (int j = 0;j<maxWidth;j++){ if (triangle[n-1][j] % 2 == 0 && triangle[n-1][j] != 0){ System.out.println(n+":"+(j+1)); break; } } */ } } }
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n =in.nextInt(); if(n==1||n==2){ System.out.println("-1"); return; } if(n%2!=0){ System.out.println("2"); return; } if(n%4!=0){ System.out.println("4"); return; }else{ System.out.println("3"); return; } } }找规律得出以上结果。
import java.util.Scanner; // 从第3行开始第n行中第一个偶数出现的位置以{2,3,2,4}循环 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n=in.nextInt(); int res=-1; int[] index={4,2,3,2}; if(n>2){ res=index[(n-2)%4]; } System.out.println(res); } }
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNextInt()) { //生成变形杨辉三角二维数组 int row = in.nextInt(); int column = 2 * row - 1; int[][] arrays = new int[row][column]; arrays[1-1][row-1] = 1;//第一行最中间的元素赋值1 for (int i = 1;i<row; i++){ for(int j = 0;j < column; j++){ if(j-1 >=0 && j+1<column){ arrays[i][j] =arrays[i-1][j-1] + arrays[i-1][j] + arrays[i-1][j+1];} if(j-1 < 0){ arrays[i][j] = 0 + arrays[i-1][j] + arrays[i-1][j+1]; } if(j+1 >= column){ arrays[i][j] = arrays[i-1][j-1] + arrays[i-1][j] + 0; } } } //最后一行,计算第一个偶数位置 int count = 0; for(int k = 0; k < (column + 1)/2 ; k++){ if (arrays[row-1][k] % 2 == 0){ System.out.println(k+1);//输出第一个偶数位置 break; } else{ count++;//没有找到则记数 } } if(count == (column + 1)/2 ){ System.out.println(-1); } } } }正常逻辑没问题,到10000时耗尽堆内存了,它奶奶的
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int row = in.nextInt(); if (row == 1 || row == 2){ System.out.println(-1); }else if ((row & 1) == 1){//奇数 System.out.println(2); }else if ((row & 2) == 2){//偶数但不是4的倍数 System.out.println(4); }else System.out.println(3);//4的倍数 } }
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNextInt()) { int a = in.nextInt(); if (a < 3) { System.out.println("-1"); return; } if((a & 1) == 1) { System.out.println("2"); return; } if((a & 2) == 2) { System.out.println("4"); return; } System.out.println("3"); return; } } }
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 int len = in.nextInt(); if (len > 2 && len % 2 == 1) { System.out.println(2) ; return; } if (len > 500) { System.out.println(3) ; return; } int[] old = new int[1]; int[] ne = new int[1]; ne[0] = 1; //组织树 for (int i = 2; i <= len; i++) { old = ne; ne = new int[i * 2 - 1]; for (int j = 0; j < ne.length; j++) { int s1 = j - 2; int s2 = j - 1; int s3 = j; int sum = 0; if (s1 >= 0 && s1 <= old.length - 1) { sum = sum + old[s1]; } if (s2 >= 0 && s2 <= old.length - 1) { sum = sum + old[s2]; } if (s3 >= 0 && s3 <= old.length - 1) { sum = sum + old[s3]; } if (i > 0) { // System.out.print(sum + " ") ; } ne[j] = sum; } if (i > 0) { // System.out.println("") ; } } for (int i = 0; i < ne.length; i++) { if (ne[i] % 2 == 0) { System.out.println(i + 1) ; return; } } System.out.println(-1) ; } }
import java.util.ArrayList; import java.util.Scanner; public class T53 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNextInt()) { int n = sc.nextInt(); if (n <= 2) { System.out.println("-1"); return; } if (n % 2 != 0) { System.out.println("2"); return; } int flag = 3; ArrayList<Integer> reference = new ArrayList<>(); reference.add(1); reference.add(2); reference.add(3); reference.add(2); reference.add(1); while (true) { ArrayList<Integer> current = new ArrayList<>(); int length = 2 * (flag+1) - 1; //对当前行数据生成 for (int i = 1; i <= length; i++) { if (i == 1 || i == length) { current.add(1); continue; } if (i == 2) { current.add(reference.get(0) + reference.get(1)); continue; } if (i == length - 1) { current.add(reference.get(reference.size() - 1) + reference.get(reference.size() - 2)); continue; } current.add(reference.get(i - 3) + reference.get(i - 2) + reference.get(i - 1)); } reference = current; flag++; if (flag == n) { break; } } for (int i = 0; i < reference.size(); i++) { if (reference.get(i) % 2 == 0) { System.out.println(i + 1); return; } } } } }
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); int [] m = {2, 3, 2, 4}; System.out.println(n >= 3 ? m[(n - 3) % 4] : -1); } }
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNextInt()) { int N = in.nextInt(); int[][] dp = new int[N + 1][2 * N]; dp[1][1] = 1; for (int i = 1; i <= N; i++) { for (int j = 1; j <= 2 * N - 1; j++) { for (int k = j - 2; k <= j; k++) { if (k < 1 || k > (2 * (i - 1) - 1)) { continue; } dp[i][j] += dp[i - 1][k]; } } } int ans = -1; for (int m = 1; m <= 2 * N - 1; m++) { if (dp[N][m] % 2 == 0) { ans = m; break; } } System.out.println(ans); } } }