题目标签
1 | 2 | 3 | 4 | 5 | |||||
约数 | 进制转换 | 数字9 | 叶结点 | hello | |||||
6 | 7 | 8 | 9 | 10 | |||||
数位递增的数 | 递增三元组 | 正整数序列的数量 | 长草 | 晚会节目单 |
1
问题描述
1200000有多少个约数(只计算正约数)。
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
96
package 约数计算;
public class Main {
public static void main(String[] args) {
int count = 0;
for (int i = 1; i <= 1200000; i++) {
if (1200000 % i == 0) {
count++;
}
}
System.out.println(count);
}
}
2
问题描述
在计算机存储中,15.125GB是多少MB?//1024
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
15488
package 进制转换;
public class Main {
//在计算机存储中,15.125GB是多少MB?//1024
public static void main(String[] args) {
System.out.println(15.125*1024);
}
}
3
问题描述
在1至2019中,有多少个数的数位中包含数字9?
注意,有的数中的数位中包含多个9,这个数只算一次。例如,1999这个数包含数字9,在计算只是算一个数。
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
544
package 数字9;
public class Main {
public static void main(String[] args) {
int count = 0;
for (int i = 1; i <= 2019; i++) {
if ((i+"").contains("9")) {
count++;
}
}
System.out.println(count);
}
}
4
问题描述
一棵包含有2019个结点的二叉树,最多包含多少个叶结点?
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
1010
package 二叉树节点;
public class Main {
public static void main(String[] args) {
//棵包含有2019个结点的二叉树,最多包含多少个叶结点?
//叶子节点数:2n-1
System.out.println((2019+1)/2);
}
}
5
问题描述
小明对类似于 hello 这种单词非常感兴趣,这种单词可以正好分为四段,第一段由一个或多个辅音字母组成,第二段由一个或多个元音字母组成,第三段由一个或多个辅音字母组成,第四段由一个或多个元音字母组成。
给定一个单词,请判断这个单词是否也是这种单词,如果是请输出yes,否则请输出no。
元音字母包括 a, e, i, o, u,共五个,其他均为辅音字母。
输入格式
输入一行,包含一个单词,单词中只包含小写英文字母。
输出格式
输出答案,或者为yes,或者为no。
样例输入
lanqiao
样例输出
yes
样例输入
world
样例输出
no
评测用例规模与约定
对于所有评测用例,单词中的字母个数不超过100。
package hello;
import java.util.Scanner;
public class Main {
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) {
Scanner sr = new Scanner(System.in);
sb.append(sr.next());
sr.close();
for (int i = 0; i < 2; i++) {
//左右验证通过两次输出yes,否则输出no
if (left(sb) && right(sb)) {
}else {
System.out.println("no");
return;
}
}
System.out.println("yes");
}
private static boolean right(StringBuilder builder) {
boolean right = false;
//一个倒序验证
builder.reverse();
while (builder.length() > 0) {//辅音
if (yuan(sb.charAt(0))) {
right = true;
sb.deleteCharAt(0);
}else {
break;
}
}
return right;
}
private static boolean left(StringBuilder builder) {
boolean left = false;
//一个正序验证
while (builder.length() > 0) {//辅音
if (!yuan(sb.charAt(0))) {
left = true;
sb.deleteCharAt(0);
}else {
break;
}
}
return left;
}
private static boolean yuan(char charAt) {//返回是否是元音
if (charAt=='a' || charAt == 'e' || charAt == 'i' || charAt == 'o' || charAt == 'u')
return true;
else
return false;
}
}
6
问题描述
一个正整数如果任何一个数位不大于右边相邻的数位,则称为一个数位递增的数,例如1135是一个数位递增的数,而1024不是一个数位递增的数。
给定正整数 n,请问在整数 1 至 n 中有多少个数位递增的数?
输入格式
输入的第一行包含一个整数 n。
输出格式
输出一行包含一个整数,表示答案。
样例输入
30
样例输出
26
评测用例规模与约定
对于 40% 的评测用例,1 <= n <= 1000。
对于 80% 的评测用例,1 <= n <= 100000。
对于所有评测用例,1 <= n <= 1000000。
package 数位递增的数;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sr = new Scanner(System.in);
int n = sr.nextInt();
sr.close();
int count = 9;//1-9
a:for (int i = 11; i <= n; i++) {
char[] arr = (i+"").toCharArray();
for (int j = 0; j < arr.length-1; j++) {
if (arr[j] > arr[j+1]) {
//如果碰见不符合递增序列,直接将不符合的那个位置后面的所有数全都捋直了变成一个数
for (int p = j; p < arr.length; p++) {
arr[p]=arr[j];
}
//捋直数节省大量时间
i = Integer.parseInt(new String(arr)) -1;
continue a;
}
}
System.out.println(i);
count++;
}
System.out.println(count);
}
}
7
问题描述
在数列 a[1], a[2], ..., a[n] 中,如果对于下标 i, j, k 满足 0<i<j<k<n+1 且 a[i]<a[j]<a[k],则称 a[i], a[j], a[k] 为一组递增三元组,a[j]为递增三元组的中心。
给定一个数列,请问数列中有多少个元素可能是递增三元组的中心。
输入格式
输入的第一行包含一个整数 n。
第二行包含 n 个整数 a[1], a[2], ..., a[n],相邻的整数间用空格分隔,表示给定的数列。
输出格式
输出一行包含一个整数,表示答案。
样例输入
5
1 2 5 3 5
样例输出
2
样例说明
a[2] 和 a[4] 可能是三元组的中心。
评测用例规模与约定
对于 50% 的评测用例,2 <= n <= 100,0 <= 数列中的数 <= 1000。
对于所有评测用例,2 <= n <= 1000,0 <= 数列中的数 <= 10000。
package 递增三元组;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sr = new Scanner(System.in);
int n = sr.nextInt();
int[] arr = new int[n];
for (int i = 0; i < arr.length; i++) {
arr[i] = sr.nextInt();
}
sr.close();
int count = 0;
//只需枚举中间的j
for (int i = 1; i < arr.length-1; i++) {
//如果j这个位置,向左走能碰见比他小的 && 向右走能碰见比他大的,就算一种
if(small(i-1,arr[i],arr) && big(i+1,arr[i],arr))
count ++;
}
System.out.println(count);
}
private static boolean big(int i, int numj, int[] arr) {
//传入的i坐标往右走,碰见大的返回true
for (int j = i; j < arr.length; j++) {
if (arr[j] > numj) {
return true;
}
}
return false;
}
private static boolean small(int i, int numj, int[] arr) {
//传入的i坐标往左走,碰见小的返回true
for (int j = i; j >= 0; j--) {
if (arr[j] < numj) {
return true;
}
}
return false;
}
}
8
问题描述
小明想知道,满足以下条件的正整数序列的数量:
1. 第一项为 n;
2. 第二项不超过 n;
3. 从第三项开始,每一项小于前两项的差的绝对值。
请计算,对于给定的 n,有多少种满足条件的序列。
输入格式
输入一行包含一个整数 n。
输出格式
输出一个整数,表示答案。答案可能很大,请输出答案除以10000的余数。
样例输入
4
样例输出
7
样例说明
以下是满足条件的序列:
4 1
4 1 1
4 1 2
4 2
4 2 1
4 3
4 4
评测用例规模与约定
对于 20% 的评测用例,1 <= n <= 5;
对于 50% 的评测用例,1 <= n <= 10;
对于 80% 的评测用例,1 <= n <= 100;
对于所有评测用例,1 <= n <= 1000。
package 正整数序列;
import java.util.Scanner;
public class Main {
static int count = 0;
public static void main(String[] args) {
Scanner sr = new Scanner(System.in);
int n = sr.nextInt();
sr.close();
for (int i = 1; i <= n; i++) {
f(n, i);
}
System.out.println(count % 10000);
}
private static void f(int n, int i) {
int abs = Math.abs(n - i);
for (int j = 1; j < abs; j++) {
f(i, j);
}
count++;
}
}
这个是带过程的
package 正整数序列;
import java.util.Scanner;
public class a {
static int count = 0;
public static void main(String[] args) {
Scanner sr = new Scanner(System.in);
int n = sr.nextInt();
sr.close();
for (int i = 1; i <= n; i++) {
f(n, i ,n+" "+i+" ");
}
System.out.println(count);
}
private static void f(int n, int i, String string) {
int abs = Math.abs(n - i);
for (int j = 1; j < abs; j++) {
f(i ,j , string+j+" ");
}
System.out.println(string);
count++;
}
}
9
问题描述
小明有一块空地,他将这块空地划分为 n 行 m 列的小块,每行和每列的长度都为 1。
小明选了其中的一些小块空地,种上了草,其他小块仍然保持是空地。
这些草长得很快,每个月,草都会向外长出一些,如果一个小块种了草,则它将向自己的上、下、左、右四小块空地扩展,这四小块空地都将变为有草的小块。
请告诉小明,k 个月后空地上哪些地方有草。
输入格式
输入的第一行包含两个整数 n, m。
接下来 n 行,每行包含 m 个字母,表示初始的空地状态,字母之间没有空格。如果为小数点,表示为空地,如果字母为 g,表示种了草。
接下来包含一个整数 k。
输出格式
输出 n 行,每行包含 m 个字母,表示 k 个月后空地的状态。如果为小数点,表示为空地,如果字母为 g,表示长了草。
样例输入
4 5
.g...
.....
..g..
.....
2
样例输出
gggg.
gggg.
ggggg
.ggg.
评测用例规模与约定
对于 30% 的评测用例,2 <= n, m <= 20。
对于 70% 的评测用例,2 <= n, m <= 100。
对于所有评测用例,2 <= n, m <= 1000,1 <= k <= 1000。
package 长草;
import java.util.Scanner;
public class Main {
static int[][] map;
//方向移动数组
static int[] dx = { 1, -1, 0, 0};
static int[] dy = { 0, 0, -1, 1};
public static void main(String[] args) {
Scanner sr = new Scanner(System.in);
int n = sr.nextInt();
int m = sr.nextInt();
map = new int[n][m];
//种艹
for (int i = 0; i < n; i++) {
String state = sr.next();
for (int j = 0; j < m; j++) {
map[i][j] = state.charAt(j)=='g'?0:-1;
}
}
int month = sr.nextInt();
//长艹
for (int i = 0; i < month; i++) {
for (int j = 0; j < n; j++) {
for (int k = 0; k < m; k++) {
//这个位置如果是上个月长得艹.那就向四个方向长这个月的艹
if (map[j][k] == i) {
bfs(j,k,i+1);
}
}
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
System.out.print((map[i][j]==-1?".":"g")+" ");
}System.out.println();
}
}
private static void bfs(int i, int j, int month) {
//根据移动方向,生成新的坐标
for (int k = 0; k < dx.length; k++) {
int nx = i + dx[k];
int ny = j + dy[k];
//如果是空地就长
if (nx >= 0 && ny >= 0 && nx < map.length && ny < map[0].length && map[nx][ny] == -1 ) {
map[nx][ny] = month;
}
}
}
}
10
问题描述
小明要组织一台晚会,总共准备了 n 个节目。然后晚会的时间有限,他只能最终选择其中的 m 个节目。
这 n 个节目是按照小明设想的顺序给定的,顺序不能改变。
小明发现,观众对于晚上的喜欢程度与前几个节目的好看程度有非常大的关系,他希望选出的第一个节目尽可能好看,在此前提下希望第二个节目尽可能好看,依次类推。
小明给每个节目定义了一个好看值,请你帮助小明选择出 m 个节目,满足他的要求。
输入格式
输入的第一行包含两个整数 n, m ,表示节目的数量和要选择的数量。
第二行包含 n 个整数,依次为每个节目的好看值。
输出格式
输出一行包含 m 个整数,为选出的节目的好看值。
样例输入
5 3
3 1 2 5 4
样例输出
3 5 4
样例说明
选择了第1, 4, 5个节目。
评测用例规模与约定
对于 30% 的评测用例,1 <= n <= 20;
对于 60% 的评测用例,1 <= n <= 100;
对于所有评测用例,1 <= n <= 100000,0 <= 节目的好看值 <= 100000。
package 晚会节目单;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
import java.util.TreeSet;
public class Main {
public static void main(String[] args) {
Scanner sr = new Scanner(System.in);
int n = sr.nextInt();
int m = sr.nextInt();
int[] arr = new int[n];
//将节目好看值加入集合与数组
ArrayList<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < arr.length; i++) {
arr[i] = sr.nextInt();
list.add(arr[i]);
}
sr.close();
//排序一下好看值
Arrays.sort(arr);
//按着原顺序输出最好看的前三个即可
TreeSet<Integer> set = new TreeSet<Integer>();
for (int i = arr.length-1; i >= 0; i--) {
set.add(list.indexOf(arr[i]));
if (set.size() == m)break;
}
for (Integer integer : set) {
System.out.print(list.get(integer)+" ");
}
}
}