曾经,有人说过,没有刷题的人生是不完整的。看了几天Java,我试着做了几道练习题,好让我的人生完整一点。(偷笑……)这里挑了一些题来跟大家分享,本文不定期更新。
题目集
1. 最后一个单词的长度(题目来自:计蒜客)
问题:
分析: 要求字符串中最后一个单词的长度,由于单词间是由空格隔开的,如果字符串末尾没有空格,就可以用字符串最后一个字母的索引减去最后一个空格的位置索引来求。但是要注意的是,此题字符串的首尾均可能存在空格。所以在接收输入的字符串后,要先把字符串尾巴的空格去掉,可以用Sting类里的
trim()
方法来实现。处理完后再用String类的length()
方法去求字符串长度length,length-1即为最后一个字母的位置索引。接下来要得到的的是最后一个空格的位置索引,可以用Sting类里的lastIndexOf(int x)
方法来得到,其括号内的参数为int型,所以要查找空格的ASCII码,为32。如果不知道空格对应的ASCII码,也可以用(int)' '
通过强制类型转化来得到对应的值。最后,要接受一串可能含有空格的字符串,可以用Scanner类里的nextLine()
方法。代码:
import java.util.Scanner; public class Main{ public static void main(String[] args) { Scanner scan=new Scanner(System.in); int length=1,i=0; String str=""; if(scan.hasNextLine()) { str=scan.nextLine(); //接收输入的字符串(可能含有空格) str=str.trim(); //去除字符串首部和尾部的空格 length=str.length(); //返回字符串的长度 } i=str.lastIndexOf(32); //返回最后一个空格的位置索引,空格ASCII码为32 System.out.println(length-1-i); } }
2. 爬楼梯(题目来自:计蒜客)
问题描述:
分析:第一遍做的时候想当然的把问题转化为求二元方程x+2y=n的解有几个,提交后发现错了。再想想,发现如果顺序不同那也是不同的方法。比如有三级楼梯,x+2y=3的解只有(3,0)(1,1)两种,但是在(1,1)的情况下,先走一级再走两级和先走两级再走一级是不一样的,所以(1,1)的情况有两种走法,一共是三种。通过自己模拟,发现可以用递归思想来解决,而结果就是跟著名的斐波那契数列,n级楼梯所对应的方法数就是斐波那契数列(从第0项开始)中的第n项(F(n))。所以可以开一个数组a[],存放斐波那契数列数列,对于输入的n,输出a[n]即可。
代码:
import java.util.Scanner; public class Main{ public static void main(String[] args) { Scanner scan=new Scanner(System.in); int n=0; int[] ways=new int[51]; if(scan.hasNextInt()) { n=scan.nextInt(); } ways[0]=0; ways[1]=1; ways[2]=2; for(int i=3;i<=n;i++) { ways[i]=ways[i-1]+ways[i-2]; } System.out.println(ways[n]); } }