一、图形显示

此题虽然简单,但是需啊哟注意的是,每个“*”后边有一个空格】

问题描述
  编写一个程序,首先输入一个整数,例如5,然后在屏幕上显示如下的图形(5表示行数):
  * * * * *
  * * * *
  * * *
  * *
  *
 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("* ");
}
}
}
}

二、排序

【由小到大排序后逆序输出】
问题描述
  编写一个程序,输入3个整数,然后程序将对这三个整数按照从大到小进行排列。
  输入格式:输入只有一行,即三个整数,中间用空格隔开。
  输出格式:输出只有一行,即排序后的结果。
  输入输出样例
样例输入
  9 2 30
样例输出
  30 9 2

 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进制表示,例如:137的2进制表示为10001001。
  将这种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)
输入格式
  正整数(1<=n<=20000)
输出格式
  符合约定的n的0,2表示(在表示中不能有空格)
样例输入
  137
样例输出
  2(2(2)+2+2(0))+2(2+2(0))+2(0)
样例输入
  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);
}
}

四、前缀表达式

【此题貌似没有按照题中要求的设计相应的函数,但是也通过了测试】
问题描述
  编写一个程序,以字符串方式输入一个前缀表达式,然后计算它的值。输入格式为:“运算符 对象1 对象2”,其中,运算符为“+”(加法)、“-”(减法)、“*”(乘法)或“/”(除法),运算对象为不超过10的整数,它们之间用一个空格隔开。要求:对于加、减、乘、除这四种运算,分别设计相应的函数来实现。
  输入格式:输入只有一行,即一个前缀表达式字符串。
  输出格式:输出相应的计算结果(如果是除法,直接采用c语言的“/”运算符,结果为整数)。
  输入输出样例
样例输入
  + 5 2
样例输出
  7
 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问题

【我的做法是先把输入的字符串使用 toLowerCase() 函数全部转化为小写字母,然后使用排序函数对字符数组进行排序,最后依次比较每个字符的大小即可!】
问题描述
  Anagrams指的是具有如下特性的两个单词:在这两个单词当中,每一个英文字母(不区分大小写)所出现的次数都是相同的。例如,“Unclear”和“Nuclear”、“Rimon”和“MinOR”都是Anagrams。编写一个程序,输入两个单词,然后判断一下,这两个单词是否是Anagrams。每一个单词的长度不会超过80个字符,而且是大小写无关的。
  输入格式:输入有两行,分别为两个单词。
  输出格式:输出只有一个字母Y或N,分别表示Yes和No。
  输入输出样例
样例输入
  Unclear
  Nuclear
样例输出
  Y
 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;
} }

六、出现次数最多的整数

【此题没有太大难度,但是如果考虑的不全面的话想得100分也有点难度,问题是他给出的测试的数据中给出的测试数值小于或者等于1,大于20……这就是一个坑。。。】
问题描述
  编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数N也是由用户输入的,最多不会超过20。然后程序将对这个数组进行统计,把出现次数最多的那个数组元素值打印出来。如果有两个元素值出现的次数相同,即并列第一,那么只打印比较小的那个值。
  输入格式:第一行是一个整数N,N   £  20;接下来有N行,每一行表示一个整数,并且按照从小到大的顺序排列。
  输出格式:输出只有一行,即出现次数最多的那个元素值。
  输入输出样例
样例输入
  5
  100
  150
  150
  200
  250
样例输出
  150
 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);
} }

七、字串统计

问题描述
  给定一个长度为n的字符串S,还有一个数字L,统计长度大于等于L的出现次数最多的子串(不同的出现可以相交),如果有多个,输出最长的,如果仍然有多个,输出第一次出现最早的。
输入格式
  第一行一个数字L。
  第二行是字符串S。
  L大于0,且不超过S的长度。
输出格式
  一行,题目要求的字符串。

  输入样例1:
  4
  bbaabbaaaaa

  输出样例1:
  bbaa

  输入样例2:
  2
  bbaabbaaaaa

  输出样例2:
  aa

数据规模和约定
  n<=60
  S中所有字符都是小写英文字母。

  提示
  枚举所有可能的子串,统计出现次数,找出符合条件的那个

 
 

八、矩阵乘法

【此题考查矩阵的乘法,如果不会矩阵的乘法的话,可以好好看看这个题,还有二维数组的运算问题】
问题描述
  输入两个矩阵,分别是m*s,s*n大小。输出两个矩阵相乘的结果。
输入格式
  第一行,空格隔开的三个正整数m,s,n(均不超过200)。
  接下来m行,每行s个空格隔开的整数,表示矩阵A(i,j)。
  接下来s行,每行n个空格隔开的整数,表示矩阵B(i,j)。
输出格式
  m行,每行n个空格隔开的整数,输出相乘後的矩阵C(i,j)的值。
样例输入
  2 3 2
  1 0 -1
  1 1 -3
  0 3
  1 2
  3 1
样例输出
  -3 2
  -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();
} } }

九、大小写转换

【大小写转换函数,字符串到字符数组的转化函数】
问题描述
  编写一个程序,输入一个字符串(长度不超过20),然后把这个字符串内的每一个字符进行大小写变换,即将大写字母变成小写,小写字母变成大写,然后把这个新的字符串输出。
  输入格式:输入一个字符串,而且这个字符串当中只包含英文字母,不包含其他类型的字符,也没有空格。
  输出格式:输出经过转换后的字符串。
  输入输出样例
样例输入
  AeDb
样例输出
  aEdB
 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);
}
} }

十、动态数组使用

【此题可以考虑使用arrayList动态链表!】
 从键盘读入n个整数,使用动态数组存储所读入的整数,并计算它们的和与平均值分别输出。要求尽可能使用函数实现程序代码。平均值为小数的只保留其整数部分。
样例输入
  5
  3 4 0 0 2
样例输出
  9 1
样例输入
  7
  3 2 7 5 2 9 1
样例输出
  29 4
 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); } }

十一、删除数组零元素

【此题如果使用数组的话可能比较麻烦,但是使用 ArrayList 的话就能达到事半功倍的效果】
  从键盘读入n个整数放入数组中,编写函数CompactIntegers,删除数组中所有值为0的元素,其后元素向数组首端移动。注意,CompactIntegers函数需要接受数组及其元素个数作为参数,函数返回值应为删除操作执行后数组的新元素个数。输出删除后数组中元素的个数并依次输出数组元素。  样例输入: (输入格式说明:5为输入数据的个数,3 4 0 0 2 是以空格隔开的5个整数)
  5
  3 4 0 0 2
  样例输出:(输出格式说明:3为非零数据的个数,3 4 2 是以空格隔开的3个非零整数)
  3
  3 4 2
样例输入
  7
  0 0 7 0 0 9 0
样例输出
  2
  7 9
样例输入
  3
  0 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]

 

蓝桥杯算法训练<一>的更多相关文章

  1. Java实现 蓝桥杯 算法训练 猴子吃包子(暴力)

    试题 算法训练 猴子吃包子 问题描述 从前,有一只吃包子很厉害的猴子,它可以吃无数个包子,但是,它吃不同的包子速度也不同:肉包每秒钟吃x个:韭菜包每秒钟吃y个:没有馅的包子每秒钟吃z个:现在有x1个肉 ...

  2. Java实现蓝桥杯 算法训练 大等于n的最小完全平方数

    试题 算法训练 大等于n的最小完全平方数 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 输出大等于n的最小的完全平方数. 若一个数能表示成某个自然数的平方的形式,则称这个数为完全平 ...

  3. 蓝桥杯算法训练 java算法 表达式求值

    问题描述 输入一个只包含加减乖除和括号的合法表达式,求表达式的值.其中除表示整除. 输入格式 输入一行,包含一个表达式. 输出格式 输出这个表达式的值. 样例输入 1-2+3*(4-5) 样例输出 - ...

  4. java实现 蓝桥杯 算法训练 Password Suspects

    问题描述 在年轻的时候,我们故事中的英雄--国王 Copa--他的私人数据并不是完全安全地隐蔽.对他来说是,这不可接受的.因此,他发明了一种密码,好记又难以破解.后来,他才知道这种密码是一个长度为奇数 ...

  5. 蓝桥杯 算法训练 Torry的困惑(基本型)(水题,筛法求素数)

    算法训练 Torry的困惑(基本型) 时间限制:1.0s   内存限制:512.0MB      问题描述 Torry从小喜爱数学.一天,老师告诉他,像2.3.5.7……这样的数叫做质数.Torry突 ...

  6. 蓝桥杯 算法训练 区间k大数查询(水题)

    算法训练 区间k大数查询 时间限制:1.0s   内存限制:256.0MB 问题描述 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个. 输入格式 第一行包含一个数n,表示序列长度. ...

  7. 蓝桥杯--算法训练 区间k大数查询

                                                                                 算法训练 区间k大数查询   时间限制:1.0 ...

  8. 蓝桥杯 算法训练 ALGO-116 最大的算式

    算法训练 最大的算式   时间限制:1.0s   内存限制:256.0MB 问题描述 题目很简单,给出N个数字,不改变它们的相对位置,在中间加入K个乘号和N-K-1个加号,(括号随便加)使最终结果尽量 ...

  9. 蓝桥杯算法训练 区间k大数查询

    算法训练 区间k大数查询   问题描述 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个. 输入格式 第一行包含一个数n,表示序列长度. 第二行包含n个正整数,表示给定的序列. 第三个 ...

  10. 蓝桥杯 算法训练 ALGO-15 旅行家的预算

    算法训练 旅行家的预算   时间限制:1.0s   内存限制:256.0MB 问题描述 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的).给定两个城市之间的距离D1.汽车 ...

随机推荐

  1. 杭电oj 3361

    Tips:字符在计算机中都是以ASCII码形式保存,直接以char形式输出ASCII码即可. #include<stdio.h> int main() { int T; scanf(&qu ...

  2. 7-05. 魔法优惠券(25) (数学 ZJU_PAT)

    题目链接:http://www.patest.cn/contests/ds/7-05 在火星上有个魔法商店,提供魔法优惠券.每一个优惠劵上印有一个整数面值K,表示若你在购买某商品时使用这张优惠劵.能够 ...

  3. 通过 Autostereograms 案例学习 OpenGL 和 OpenCL 的互操作性

    引言 在过去的十年里, GPU (图形处理单元)已经从特殊硬件(特供)转变成能够在数值计算领域开辟新篇章的高性能计算机设备. 很多算法能够使用拥有巨大的处理能力的GPU来快速运行和处理大数据量.即使在 ...

  4. iOS7 UIKit动力学-碰撞特性UICollisionBehavior 下

    上文讲到了为window加一个边界.实现碰撞的效果,接下来我们将提到一个托付方法: - (void)collisionBehavior:(UICollisionBehavior *)behavior ...

  5. 搭建PhoneCat项目的开发与测试环境

    AngularJS官方网站提供了一个用于学习的示例项目:PhoneCat.这是一个Web应用,用户可以浏览一些Android手机,了解它们的详细信息,并进行搜索和排序操作. 获取源代码 PhoneCa ...

  6. DevExpress.GridControl.gridView的一些注意

    1.DevExpress控件组中的GridControl控件不能使横向滚动条有效.现象:控件中的好多列都挤在一起,列宽都变的很小,根本无法正常浏览控件单元格中的内容. 解决: gridView1.Op ...

  7. php正则表达式匹配函数

    <?php function show($var=null){ if(empty($var))  { echo 'null'; }else if(is_array($var) || is_obj ...

  8. Windows系统的安装

    一.写在前面        笔者最近因为换工作,在家待业甚感无聊,于是想要整理一些在Windows系统的一些安装方法和下载资源,一来给自己做个备忘,二来把一些不成熟的想法分享出去,希望大家予以指正. ...

  9. 怎么使用dreamweaver制作网页教程 dw建站设计网页

    对于网页制作相关专业人士一定对dreamweaver有所认识,下面小编就问大家总结一下相关网页制作的一些步骤,喜欢的朋友可以一起来学习一下   Dreamweaver这一款专业的网页制作软件,相信相关 ...

  10. c# List<string>和List<int>互相转换

    List<string> 转 List<int> var list = (new[]{"1","2","3"}).T ...