蓝桥杯算法训练<一>
一、图形显示
此题虽然简单,但是需啊哟注意的是,每个“*”后边有一个空格】
* * * * *
* * * *
* * *
* *
*
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner mScanner = new Scanner(System.in);
int n = mScanner.nextInt();
for (int i = n; i > 0; i--) {
if (i != n) {
System.out.println();
}
for (int j = 0; j < i; j++) {
System.out.print("* ");
}
}
}
}
二、排序
输入格式:输入只有一行,即三个整数,中间用空格隔开。
输出格式:输出只有一行,即排序后的结果。
输入输出样例
import java.util.Arrays;
import java.util.Scanner; public class Main{ public static void main(String[] args) {
Scanner mScanner = new Scanner(System.in);
int[] array = new int[3];
for (int i = 0; i < array.length; i++) {
array[i] = mScanner.nextInt();
}
Arrays.sort(array);
for (int i = array.length - 1; i >= 0; i--) {
System.out.print(array[i] + " ");
}
} }
三、2的次幂表示
将这种2进制表示写成2的次幂的和的形式,令次幂高的排在前面,可得到如下表达式:137=2^7+2^3+2^0
现在约定幂次用括号来表示,即a^b表示为a(b)
此时,137可表示为:2(7)+2(3)+2(0)
进一步:7=2^2+2+2^0 (2^1用2表示)
3=2+2^0
所以最后137可表示为:2(2(2)+2+2(0))+2(2+2(0))+2(0)
又如:1315=2^10+2^8+2^5+2+1
所以1315最后可表示为:
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
提示
用递归实现会比较简单,可以一边递归一边输出
import java.util.Scanner;
public class Main{
public void fun(double e) {
double d = e;
if (d == 1) {
System.out.print("2(0)");
} else {
if (d == 2) {
System.out.print("2");
} else {
int x = 1;
int m = 0;
while (m == 0) {
if ((Math.pow(2, x + 1) > d) && (d >= Math.pow(2, x))) {
m = 1;
if (d == Math.pow(2, x)) {
System.out.print("2");
if (x == 1) {
} else {
System.out.print("(");
fun(x);
System.out.print(")");
}
} else {
System.out.print("2");
if (x == 1) {
} else {
System.out.print("(");
fun(x);
System.out.print(")");
}
System.out.print("+");
fun(d - Math.pow(2, x));
}
} else {
x++;
}
}
}
}
}
public static void main(String[] args) {
Scanner mScanner = new Scanner(System.in);
double n = mScanner.nextInt();
Main cm = new Main();
cm.fun(n);
}
}
四、前缀表达式
输入格式:输入只有一行,即一个前缀表达式字符串。
输出格式:输出相应的计算结果(如果是除法,直接采用c语言的“/”运算符,结果为整数)。
输入输出样例
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner mScanner = new Scanner(System.in);
String mm = mScanner.next();
int a = mScanner.nextInt();
int b = mScanner.nextInt();
if (mm.equals("+")) {
System.out.println(a+b);
}else if (mm.equals("-")) {
System.out.println(a-b);
}else if (mm.equals("*")) {
System.out.println(a*b);
}else if (mm.equals("/")) {
System.out.println(a/b);
}
}
}
五、Anagrams问题
输入格式:输入有两行,分别为两个单词。
输出格式:输出只有一个字母Y或N,分别表示Yes和No。
输入输出样例
Nuclear
import java.util.Arrays;
import java.util.Scanner; public class Main{ public static void main(String[] args) {
Scanner mScanner = new Scanner(System.in);
String str1 = mScanner.next().toLowerCase();
String str2 = mScanner.next().toLowerCase();
if (str1.length() == str2.length()) {
char[] arr1 = fun(str1);
char[] arr2 = fun(str2);
boolean tag = true;
for (int i = 0; i < arr1.length; i++) {
if (arr1[i] != arr2[i]) {
tag = false;
}
}
if (tag) {
System.out.println("Y");
}else{
System.out.println("N");
}
} else {
System.out.println("N");
}
} public static char[] fun(String str) {
char[] array = str.toCharArray();
Arrays.sort(array);
return array;
} }
六、出现次数最多的整数
编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数N也是由用户输入的,最多不会超过20。然后程序将对这个数组进行统计,把出现次数最多的那个数组元素值打印出来。如果有两个元素值出现的次数相同,即并列第一,那么只打印比较小的那个值。
输入格式:第一行是一个整数N,N £ 20;接下来有N行,每一行表示一个整数,并且按照从小到大的顺序排列。
输出格式:输出只有一行,即出现次数最多的那个元素值。
输入输出样例
100
150
150
200
250
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner mScanner = new Scanner(System.in);
int m = mScanner.nextInt();
if (m < 1 || m > 20) {
return;
}
int[] array = new int[m];
for (int i = 0; i < m; i++) {
array[i] = mScanner.nextInt();
}
int max = 0;
int tag = 0;
int num = 0;
for (int i = 1; i < array.length; i++) {
if (array[i - 1] == array[i]) {
tag++;
} else {
tag = 0;
}
if (tag > max) {
num = array[i];
max = tag;
}
}
if (num==0) {
num = array[0];
}
System.out.println(num);
}
}
七、字串统计
第二行是字符串S。
L大于0,且不超过S的长度。
输入样例1:
4
bbaabbaaaaa
输出样例1:
bbaa
输入样例2:
2
bbaabbaaaaa
输出样例2:
aa
S中所有字符都是小写英文字母。
提示
枚举所有可能的子串,统计出现次数,找出符合条件的那个
八、矩阵乘法
接下来m行,每行s个空格隔开的整数,表示矩阵A(i,j)。
接下来s行,每行n个空格隔开的整数,表示矩阵B(i,j)。
1 0 -1
1 1 -3
0 3
1 2
3 1
-8 2
提示
矩阵C应该是m行n列,其中C(i,j)等于矩阵A第i行行向量与矩阵B第j列列向量的内积。
例如样例中C(1,1)=(1,0,-1)*(0,1,3) = 1 * 0 +0*1+(-1)*3=-3
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner mScanner = new Scanner(System.in);
int m = mScanner.nextInt();
int s = mScanner.nextInt();
int n = mScanner.nextInt();
int[][] a = new int[m][s];
int[][] b = new int[s][n];
int[][] c = new int[m][n];
for (int i = 0; i < m; i++) {
for (int j = 0; j < s; j++) {
a[i][j] = mScanner.nextInt();
}
}
for (int i = 0; i < s; i++) {
for (int j = 0; j < n; j++) {
b[i][j] = mScanner.nextInt();
}
}
getMatrix(a, b);
}
public static void getMatrix(int[][] a, int[][] b) {
int[][] c = new int[a.length][b[0].length];
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < b[0].length; j++) {
int sum = 0;
for (int k = 0; k < b.length; k++) {
sum += a[i][k] * b[k][j];
}
c[i][j] = sum;
}
}
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < b[0].length; j++) {
System.out.print(c[i][j] + "\t");
}
System.out.println();
}
}
}
九、大小写转换
输入格式:输入一个字符串,而且这个字符串当中只包含英文字母,不包含其他类型的字符,也没有空格。
输出格式:输出经过转换后的字符串。
输入输出样例
import java.util.Scanner;
public class Main { public static void main(String[] args) {
Scanner mScanner = new Scanner(System.in);
String str = mScanner.next();
char[] arr = str.toCharArray();
for (int i = 0; i < arr.length; i++) {
if (Character.isLowerCase(arr[i])) {
str = String.valueOf(arr[i]).toUpperCase();
} else {
str = String.valueOf(arr[i]).toLowerCase();
}
System.out.print(str);
}
} }
十、动态数组使用
3 4 0 0 2
3 2 7 5 2 9 1
import java.util.ArrayList;
import java.util.Scanner; public class Main { public static void main(String[] args) {
Scanner mScanner = new Scanner(System.in);
int length = mScanner.nextInt(); int sum = 0;
int average = 0;
for (int i = 0; i < length; i++) {
sum = sum + mScanner.nextInt();
}
System.out.println(sum + " " + sum / length); } }
十一、删除数组零元素
5
3 4 0 0 2
样例输出:(输出格式说明:3为非零数据的个数,3 4 2 是以空格隔开的3个非零整数)
3
3 4 2
0 0 7 0 0 9 0
7 9
0 0 0
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner mScanner = new Scanner(System.in);
int count = mScanner.nextInt(); List<Integer> list = new ArrayList<Integer>(); // int[] arr = new int[count];
for (int i = 0; i < count; i++) {
// arr[i] = mScanner.nextInt();
list.add(mScanner.nextInt());
}
int length = CompactIntegers(list, count);
System.out.println(length); for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i) + " ");
} } public static int CompactIntegers(List<Integer> list, int count) {
int ss = count;
for (int i = 0; i < list.size(); i++) {
if (list.get(i) == 0) {
list.remove(i);
ss--;
i--;
}
}
return ss;
}
}
注:本文系原创,首发于博客园,转载请注明出处。[http://www.cnblogs.com/zhjsll/p/4412250.html]
蓝桥杯算法训练<一>的更多相关文章
- Java实现 蓝桥杯 算法训练 猴子吃包子(暴力)
试题 算法训练 猴子吃包子 问题描述 从前,有一只吃包子很厉害的猴子,它可以吃无数个包子,但是,它吃不同的包子速度也不同:肉包每秒钟吃x个:韭菜包每秒钟吃y个:没有馅的包子每秒钟吃z个:现在有x1个肉 ...
- Java实现蓝桥杯 算法训练 大等于n的最小完全平方数
试题 算法训练 大等于n的最小完全平方数 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 输出大等于n的最小的完全平方数. 若一个数能表示成某个自然数的平方的形式,则称这个数为完全平 ...
- 蓝桥杯算法训练 java算法 表达式求值
问题描述 输入一个只包含加减乖除和括号的合法表达式,求表达式的值.其中除表示整除. 输入格式 输入一行,包含一个表达式. 输出格式 输出这个表达式的值. 样例输入 1-2+3*(4-5) 样例输出 - ...
- java实现 蓝桥杯 算法训练 Password Suspects
问题描述 在年轻的时候,我们故事中的英雄--国王 Copa--他的私人数据并不是完全安全地隐蔽.对他来说是,这不可接受的.因此,他发明了一种密码,好记又难以破解.后来,他才知道这种密码是一个长度为奇数 ...
- 蓝桥杯 算法训练 Torry的困惑(基本型)(水题,筛法求素数)
算法训练 Torry的困惑(基本型) 时间限制:1.0s 内存限制:512.0MB 问题描述 Torry从小喜爱数学.一天,老师告诉他,像2.3.5.7……这样的数叫做质数.Torry突 ...
- 蓝桥杯 算法训练 区间k大数查询(水题)
算法训练 区间k大数查询 时间限制:1.0s 内存限制:256.0MB 问题描述 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个. 输入格式 第一行包含一个数n,表示序列长度. ...
- 蓝桥杯--算法训练 区间k大数查询
算法训练 区间k大数查询 时间限制:1.0 ...
- 蓝桥杯 算法训练 ALGO-116 最大的算式
算法训练 最大的算式 时间限制:1.0s 内存限制:256.0MB 问题描述 题目很简单,给出N个数字,不改变它们的相对位置,在中间加入K个乘号和N-K-1个加号,(括号随便加)使最终结果尽量 ...
- 蓝桥杯算法训练 区间k大数查询
算法训练 区间k大数查询 问题描述 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个. 输入格式 第一行包含一个数n,表示序列长度. 第二行包含n个正整数,表示给定的序列. 第三个 ...
- 蓝桥杯 算法训练 ALGO-15 旅行家的预算
算法训练 旅行家的预算 时间限制:1.0s 内存限制:256.0MB 问题描述 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的).给定两个城市之间的距离D1.汽车 ...
随机推荐
- [LeetCode] Search in Rotated Sorted Array [35]
题目 Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 m ...
- jQuery源代码学习笔记:jQuery.fn.init(selector,context,rootjQuery)代码具体解释
3.1 源代码 init: function( selector, context, rootjQuery ) { var match, elem, ret, doc; // Handle $(&qu ...
- 从一个非开发人员转行silverlight满一年的工作总结(第一次发帖)
自2013年3月进入公司到现在已整整一年.这一年,让我从一个大学毕业就去参军并且专业还不对口的大学生步入了软件开发这个高门槛行业.说实话,我真的很庆幸,庆幸遇到了两位赏识自己的领导从很多专业对口.能力 ...
- MongoDB 操作
通过CMD命令操作数据 确保MongoDB的服务已经正常安装,记下安装目录(D:\MongoDB\Service) 然后打开cmd 先转到D盘 cd D: 然后转到服务的安装目录下 cd D:\Mon ...
- GCD实现简单的单例类-Singletion
什么是单例模式 1.单例模式是一个类在系统中只有一个实例对象.通过全局的一个入口点对这个实例对象进行访问.在 iOS 开发中,单例模式是非常有用的一种设计模式.如 下图,是一个简单单例模式的 UML ...
- codevs1127
学校里有一个水房,水房里一共装有m 个龙头可供同学们打开水,每个龙头每秒钟的供水量相等,均为1. 现在有n 名同学准备接水,他们的初始接水顺序已经确定.将这些同学按接水顺序从1到n 编号,i 号同学的 ...
- 使用PowerShell管理Windows8应用
引子(?): 我从消费者预览版开始使用的win8,大概是因为我年龄不大的缘故,我很快熟悉了这个操作系统并习惯了使用windows8的Modern App.我之前使用过一个叫Windows8 Moder ...
- hibernate中先建表还是先建实体类
在实际工作中往往是先建表然后再生成类原因:建好数据库表之后往往要对数据表进行一些优化,比如说建索引,比如说建中间表,比如建视图.如果先建类的话这些优化是无法生成的
- PHP扫雷(转载)。
<?php @$init = $_POST["init"];//game restart @$clickvalue = $_POST["clickvalue& ...
- lua学习笔记(1)-基本语法
==============变量类型nilnumber(实数) 1 2 3.14 7.65e8string "hello world" "\n ...