• Java 第十一届校内模拟真题


    第十一届校内模拟真题

    15.125GB

    【问题描述】
    在计算机存储中,15.125GB是多少MB?

    【答案提交】
    这是一道结果填空的题,你只需要算出结果后提交即可。
    本题的结果为一个整数,在提交答案时只填写这个整数,
    填写多余的内容将无法得分。
    【答案】15488.0
    【代码】

          public static void main(String[] args) {
    		System.out.println(15.125*1024);
    	}
    

    【输出】
    15488

    约数个数

    【问题描述】
    1200000有多少个约数(只计算正约数)。

    【答案提交】
    这是一道结果填空的题,
    你只需要算出结果后提交即可。
    本题的结果为一个整数,在提交答案时只填写这个整数,
    填写多余的内容将无法得分。
    【答案】96
    【分析】
    什么使约数?
    约数,又称因数。整数a除以整数b(b≠0) 除得的商正好是整数而没有余数,我们就说a能被b整除,或b能整除a。a称为b的倍数,b称为a的约数。
    4的正约数有:1、2、4。
    6的正约数有:1、2、3、6。
    10的正约数有:1、2、5、10。
    12的正约数有:1、2、3、4、6、12。
    15的正约数有:1、3、5、15。
    【代码】

            public static void main(String[] args) {
    		System.out.println(fun(1200000));
    	}
    	// 返回约束的个数
    	public static int fun(int num) {
    		int count=0;
    		for(int i=1;i<=num;i++) {
    			if(num%i==0) {
    				count++;
    			}
    		}
    		return count;
    	}
    

    【输出】
    96

    叶结点数

    【问题描述】一棵包含有2019个结点的二叉树,
    最多包含多少个叶结点?
    【答案提交】这是一道结果填空的题,
    你只需要算出结果后提交即可。本题的结果为一个整数,
    在提交答案时只填写这个整数,填写多余的内容将无法得分。
    【答案】1010
    【分析】
    二叉树什么时候出现最多的叶结点的情况?
    在完全二叉树的情况下可以得到最多的叶子节点。
    叶子节点最多的个数与节点总数的奇偶有关,奇数个则有(n-1)/2+1个
    偶数个则有n/2个。
    【代码】
    小编写的时候不知道这个公式,所以暴力破解

          public static void main(String[] args) {
    		double sum = 0;
    		for(double i=0;i<2019;i++) {
    			if(sum>=2019) {
    				break;
    			}
    			sum = sum+ Math.pow(2,i);
    			System.out.println("该层有节点"+Math.pow(2,i)+"个---------------"+"树的层数"+(i+1)+"总计:"+sum);
    		}
    		System.out.println(1024-(2047-2019)/2);
    	}
    

    【输出】
    该层有节点1.0个---------------树的层数1.0总计:1.0
    该层有节点2.0个---------------树的层数2.0总计:3.0
    该层有节点4.0个---------------树的层数3.0总计:7.0
    该层有节点8.0个---------------树的层数4.0总计:15.0
    该层有节点16.0个---------------树的层数5.0总计:31.0
    该层有节点32.0个---------------树的层数6.0总计:63.0
    该层有节点64.0个---------------树的层数7.0总计:127.0
    该层有节点128.0个---------------树的层数8.0总计:255.0
    该层有节点256.0个---------------树的层数9.0总计:511.0
    该层有节点512.0个---------------树的层数10.0总计:1023.0
    该层有节点1024.0个---------------树的层数11.0总计:2047.0
    1010

    数字9

    【问题描述】在1至2019中,有多少个数的数位中包含数字9?
    注意,有的数中的数位中包含多个9,这个数只算一次。
    例如,1999这个数包含数字9,在计算只是算一个数。
    【答案提交】这是一道结果填空的题,你只需要算出结果后提交即可。
    本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
    【答案】544
    【分析】
    将整型转为字符串型,利用String api的indexOf(),当一个数中没有出现字符9,返回-1
    【代码】

          public static void main(String[] args) {
    		int count = 0;
    		for(int i=1;i<=2019;i++) {
    			if(String.valueOf(i).indexOf('9')!=-1) {
    				count++;
    			}
    		}
    		System.out.println(count);
    	}
    

    【输出】544

    位数递增的数

    【问题描述】一个正整数如果任何一个数位不大于右边相邻的数位,则称为一个数位递增的数,例如1135是一个数位递增的数,而1024不是一个数位递增的数。
    给定正整数 n,请问在整数 1 至 n 中有多少个数位递增的数?
    【输入格式】输入的第一行包含一个整数 n。

    【输出格式】输出一行包含一个整数,表示答案。
    【样例输入】30【样例输出】26
    【评测用例规模与约定】对于 40% 的评测用例,1 >= n >= 1000。对于 80% 的评测用例,1 >= n >= 100000。对于所有评测用例,1 >= n >= 1000000。
    【分析】首先想到的是指针指向整数的第一位,第一位与后一位进行比较。后来又想到可以用递归的方法,没想出来,于是借鉴了别人的代码
    【代码】
    非递归

          public static void main(String[] args) {
    		Scanner scan = new Scanner(System.in);
    		int n = scan.nextInt();
    		System.out.println(fun(n));
    	}
    	public static int fun(int n) {
    		int count = 0;
    		boolean flag = true;
    		for(int i=1;i<=n;i++) {
    			flag = true;
    			String numString = String.valueOf(i);
    			for(int j=0;j<numString.length()-1;j++) {
    				if(!(numString.charAt(j)<=numString.charAt(j+1))) {
    					flag = false;
    					break;
    				}
    			}
    			if(flag) {
    				count++;
    			}
    		}
    		return count;
    	}
    

    递归

          public static int n=0;
    	public static int count = 0;
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		n = sc.nextInt();
    		sc.close();
    		fun(0,1);
    		System.out.println(count-1);
    	}
    	public static int fun(int num,int temp) {
    		// num 这个数,temp是位数
    		if(num>n) {
    			return 0;
    		}else {
    			count++;
    		}
    		for(int i=temp;i<10;i++) {
    			fun(num*10+i,i);
    		}
    		return count;
    	}
    

    递增三元组

    【问题描述】
    在数列 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。
    【代码】

          public static void main(String[] args) {
    		Scanner scan = new Scanner(System.in);
    		int n = scan.nextInt();
    		int a[] = new int[n];
    		for (int i = 0; i < a.length; i++) {
    			a[i] = scan.nextInt();
    		}
    		int num = fun(a);
    		System.out.println(num);
    	}
    
    	public static int fun(int a[]) {
    		int num = 0;
    		boolean flag = false;
    		for(int j = 1;j<a.length-1;j++) {
    			flag = false;
    			for(int i=0;i<j;i++) {
    				for(int k=j+1;k<a.length;k++) {
    					if(a[i]<a[j]&&a[j]<a[k]) {
    						num++;
    						flag = true;
    						break;
    					}
    				}
    				if(flag) {
    					break;
    				}
    			}
    		}
    		return num;
    	}
    

    音节判断

    【问题描述】
    小明对类似于 hello 这种单词非常感兴趣,这种单词可以正好分为四段,第一段由一个或多个辅音字母组成,第二段由一个或多个元音字母组成,第三段由一个或多个辅音字母组成,第四段由一个或多个元音字母组成。
    给定一个单词,请判断这个单词是否也是这种单词,如果是请输出yes,否则请输出no。
    元音字母包括 a, e, i, o, u,共五个,其他均为辅音字母。
    【输入格式】
    输入一行,包含一个单词,单词中只包含小写英文字母。
    【输出格式】
    输出答案,或者为yes,或者为no。
    【样例输入】
    lanqiao
    【样例输出】
    yes
    【样例输入】
    world
    【样例输出】
    no
    【评测用例规模与约定】
    对于所有评测用例,单词中的字母个数不超过100。

          public static void main(String[] args) {
    		Scanner scan = new Scanner(System.in);
    		String str = scan.next();
    		if (fun(str)) {
    			System.out.println("yes");
    		} else {
    			System.out.println("no");
    		}
    
    	}
    
    	public static boolean fun(String str) {
    		char chs[] = str.toCharArray();
    		String yuanyin = "aeiou";
    		int flag = 0;
    		for (int i = 0; i < chs.length; i++) {
    			if (flag % 2 == 0 && !yuanyin.contains(String.valueOf(chs[i]))) {
    				flag++;
    			} else if (flag % 2 != 0 && yuanyin.contains(String.valueOf(chs[i]))) {
    				flag++;
    			}
    		}
    		if (flag == 4) {
    			return true;
    		}
    		return false;
    	}
    

    长草

    【问题描述】
    小明有一块空地,他将这块空地划分为 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。

            public static int[][] bool;
    	public static int k = 0, n = 0, m = 0;
    	public static char block[][];
    	public static void main(String[] args) {
    		Scanner scan = new Scanner(System.in);
    		n = scan.nextInt();
    		m = scan.nextInt();
    		bool = new int[n][m];
    		block = new char[n][m];
    		for (int i = 0; i < n; i++) {
    			char temp[] = scan.next().toCharArray();
    			for (int j = 0; j < m; j++) {
    				block[i][j] = temp[j];
    			}
    		}
    		k = scan.nextInt();
    		fun(block, k);
    		for (int i = 0; i < n; i++) {
    			for (int j = 0; j < m; j++) {
    				System.out.print(block[i][j]);
    			}
    			System.out.println();
    		}
    	}
    
    	public static void fun(char block[][], int k) {
    		while (k > 0) {
    			for (int i = 0; i < block.length; i++) {
    				for (int j = 0; j < block[i].length; j++) {
    					if (block[i][j] == 'g')
    						bool[i][j] = 1;
    				}
    			}
    			for (int i = 0; i < bool.length; i++) {
    				for (int j = 0; j < bool[i].length; j++) {
    					if (bool[i][j] == 1) {
    						if (i - 1 >= 0) {
    							block[i - 1][j] = 'g';
    						}
    						if (i + 1 < block.length) {
    							block[i + 1][j] = 'g';
    						}
    						if (j - 1 >= 0) {
    							block[i][j - 1] = 'g';
    						}
    						if (j + 1 < bool[i].length) {
    							block[i][j + 1] = 'g';
    						}
    					}
    				}
    			}
    			k--;
    		}
    	}
    

    序列计数

    【问题描述】
    小明想知道,满足以下条件的正整数序列的数量:

    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。
          public static int n=0,count=0;
    	public static int [] []map ;
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		 n =sc.nextInt();
    		 sc.close();
    		 map = new int [n+1][n+1];
    		 for (int i = 1; i <=n; i++) {
    			map[i][i]=1;
    			map[i][0]=1;
    			map[0][i]=1;
    		}
    		 for (int i = 1; i <=n; i++) {
    			count+=f(n,i);
    			count%=10000;
    //			System.out.println(count);
    		}
    		 System.out.println(count);
    //		 System.out.println(f(4,2));
    		 
    	}
    	public static int f(int x,int y){
    		if(map[x][y]!=0){
    			return map[x][y];
    		}
    		for (int i = Math.abs(x-y)-1; i>=0; i--) {
    			map[x][y]+=f(y,i);
    		}
    		map[x][y]%=10000;
    //		map[y][x]=map[x][y];
    //		System.out.println();
    		return map[x][y];
    	}
    
    

    晚会节目单

    【问题描述】
    小明要组织一台晚会,总共准备了 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。

          public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		int n = sc.nextInt();
    		int m = sc.nextInt();
    		int[] num = new int[n];
    		int[] order = new int[n];
    		for (int i = 0; i < n; i++) {
    			num[i] = sc.nextInt();
    			order[i] = num[i];
    		}
    		sc.close();
    		Arrays.sort(order);
    		ArrayList<String> list = new ArrayList<String>();
    		for (int i = n - m; i < n; i++) {
    			list.add(order[i]+"");
    		}
    		StringBuilder sb = new StringBuilder("");
    		for (int i : num) {
    			if (list.contains(i+"")) {
    				list.remove(i+"");
    				sb.append(i + " ");
    			}
    		}
    		System.out.println(sb);
    	}
    
  • 相关阅读:
    POJ 2492 并查集扩展(判断同性恋问题)
    菜鸟带你飞______DP基础26道水题
    HDU 1978 记忆化搜索(dfs+dp)
    HDU 1203 I NEED A OFFER (01背包&&概率dp)
    HDU 1176免费馅饼 DP数塔问题转化
    HDU 1069&&HDU 1087 (DP 最长序列之和)
    最短路&&最小生成树水题
    POJ 1797 Heavy Transportation (Dijkstra变形)
    数论学习笔记
    Codeforces Round #579 (Div. 3)
  • 原文地址:https://www.cnblogs.com/lyhLive/p/13379461.html
Copyright © 2020-2023  润新知