题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 小蓝有很多数字卡片,每张卡片上都是数字 0 到 9 小蓝准备用这些卡片来拼一些数,他想从 1开始拼出正整数,每拼一个,就保存起来,卡片就不能用来拼其它数了。 小蓝想知道自己能从 1 拼到多少。 例如,当小蓝有 30张卡片,其中 0 到 9各 3 张,则小蓝可以拼出 1 到 10 但是拼 11 时卡片 1 已经只有一张了,不够拼出 11 现在小蓝手里有 0 到 9的卡片各 2021张,共 20210张,请问小蓝可以从 1拼到多少? 提示:建议使用计算机编程解决问题。
import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改 public class Main { public static void main(String[] args) { int count=0; for (int i = 1; i < 20210; i++) { String str=i+""; for (int j = 0; j < str.length(); j++) { if(str.charAt(j)=='1') { count++; } } if(count==2021) { System.out.println(str); break; } } scan.close(); } }
思路:反正就是把1用完就可以了,就可以找出那个数字了。
上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和。 路径上的每一步只能从一个数走到下一层和它最近的左边的那个数或者右 边的那个数。此外,向左下走的次数与向右下走的次数相差不能超过 1。
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int[][] arr = new int[N][N]; int[][] dp = new int[N][N]; for(int i=0;i<N;i++) { for(int j=0;j<=i;j++) { arr[i][j] = sc.nextInt(); } } sc.close(); dp[0][0] = arr[0][0]; for(int i=1;i<N;i++) { dp[i][0] = dp[i-1][0] + arr[i][0]; } for(int i=1;i<N;i++) { for(int j=1;j<=i;j++) { dp[i][j] = arr[i][j] + Math.max(dp[i-1][j], dp[i-1][j-1]); } } if(N%2!=0) { System.out.println(dp[N-1][N/2]); }else { System.out.println(Math.max(dp[N-1][N/2], dp[N-1][N/2-1])); } } }
动态规划问题,看题解的哎,就是先把前排数字放a【0】行a【1】行....然后上一行的数字加上下一行大的dp,这样子加上去。接着因为向左下走的次数与向右下走的次数相差不能超过 1,所以要dp【n-1】【n/2】
小蓝准备用 256MB 的内存空间开一个数组,数组的每个元素都是 32 位 二进制整数,如果不考虑程序占用的空间和维护内存需要的辅助空间,请问 256MB 的空间可以 存储多少个 32 位二进制整数?
256*1024*1024*8/32
思路:这个填空题,算一下就ok。
小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是一个 0 到 100 的整数。 请计算这次考试的最高分、最低分和平均分。 输入描述 输入的第一行包含一个整数 n (1≤n≤10 4次方),表示考试人数。 接下来 n 行,每行包含一个 0 至 100 的整数,表示一个学生的得分。 输出描述 输出三行。 第一行包含一个整数,表示最高分。 第二行包含一个整数,表示最低分。 第三行包含一个实数,四舍五入保留正好两位小数,表示平均分
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); double num = scan.nextInt(); int max = 0; int min = 100; //int sum; double sum = 0;// for(int i = 0; i < num; i++){ int j = scan.nextInt(); if(max < j) max = j; if(min > j) min = j; sum += j; } double ave = sum/num; System.out.println(max); System.out.println(min); System.out.printf("%.2f",ave); scan.close(); } }
思路:其余没什么好说的,就是题目看仔细,要四舍五入,然后printf(“%.2f,ave)
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 如下图所示,小明用从 1 开始的正整数“蛇形”填充无限大的矩阵。
思路:20*20+19*19;
今天有点水。。。。明天继续,请各位大佬指点