蓝桥杯算法训练<一>
一、图形显示
此题虽然简单,但是需啊哟注意的是,每个“*”后边有一个空格】
* * * * *
* * * *
* * *
* *
*
- 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.汽车 ...
随机推荐
- 《Java解惑》书摘
例子1:关于char数组的输出 System.out.println("H" + "a");//输出:Ha System.out.println('H' + ' ...
- 安装android studio时,解决unable to access android sdk add-on list
1.打开时提示如下错误. 2.在安装路径下找到idea.properties文件,用记事本打开,添加disable.android.first.run=true,保存即可. 3.再次打开Android ...
- Windows下安装Python3.4.2
一.Windows下安装Python3.4.2 1.下载Windows下的Python3.4.2.exe 2.指定一个目录安装,然后下一步 3.配置环境变量包括Python.exe的文件.目录如下图所 ...
- C#中MessageBox用法总结
我们在程序中经常会用到MessageBox. MessageBox.Show()共有21中重载方法.现将其常见用法总结如下: 1.MessageBox.Show("Hello~~~~&quo ...
- C#中Abstract和Virtual 【转】
http://www.cnblogs.com/blsong/archive/2010/08/12/1798064.html 在C#的学习中,容易混淆virtual方法和abstract方法的使用,现在 ...
- hdu 4521 线段树改点求点的应用
小明系列问题——小明序列 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Tot ...
- 实现了在android实现左右滑动切换界面的效果
这是实现了在android实现左右滑动切换界面的效果,该效果的源码下载,请到源码天堂下载吧,喜欢的朋友可以研究一下. 布局文件 <?xml version="1.0" enc ...
- 响应式流布局插件DyLay
jQuery插件-Dylay,流布局我们前面介绍过很多,但这个流布局jQuery插件不同的是它的动画效果很不错,大家可以尝试使用下.另外<有用的jQuery布局插件推荐>这篇文章中有好几个 ...
- SecureCRT中文显示乱码的解决方法
注:本文出自:http://riching.iteye.com/blog/349754 最近开始用SecureCRT登陆linux系统,由于是新手,很多问题不清楚,碰到显示中文乱码的问题,困扰了好几天 ...
- ios读取文件
// 创建文件管理器 NSFileManager *fm=[NSFileManager defaultManager]; //获取路径 NSArray *paths=NSSearchPathForDi ...