计算字符串最后一个单词的长度,单词以空格隔开。
输入:一行字符串,非空,长度小于5000。
输出:整数N,最后一个单词的长度。
import java.util.Scanner; public class test{ public static void main(String[] args) { Scanner input = new Scanner(System.in); String string= input.nextLine(); String[] arr=string.split(" "); System.out.println(arr[arr.length-1].length()); input.close(); } }nextLine的输入以enter键结束,而next的输入空格不计入。
split分隔符,返回一个数组(注意:特别的标识符如“\\." "\\|")。
二.
写出一个程序,接受一个有字母和数字以及空格组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写。
import java.util.Scanner; public class test{ public static void main(String[] args) { Scanner input = new Scanner(System.in); String str = input.nextLine().toUpperCase(); //target里面存放string里的第一个字符(因为string里面只有一个字符)。 char target=input.nextLine().toUpperCase().toCharArray()[0]; int count=0; for(int i=0;i<str.length();i++) { if(str.charAt(i)==target) { count++; } } input.close(); System.out.println(count); } }toUpperCase()转换成大写;toCharArray()[0]存放字符串里的第一个字符。
str.CharAt()返回指定索引处的char值。
三.
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。
Input Param
n 输入随机数的个数
inputArray n个随机整数组成的数组
Return Value
OutputArray 输出处理后的随机整数
注:测试用例保证输入参数的正确性,答题者无需验证。测试用例不止一组。
package test; import java.util.Scanner; import java.util.Arrays; public class test { public static void main(String[] args) { Scanner in = new Scanner(System.in); while(in.hasNext()) { int n=in.nextInt(); int[] array=new int[n]; for(int i=0;i<n;i++) { array[i]=in.nextInt(); } Arrays.sort(array);//对数组进行排序 //对排好序的数组中重复的数组进行选择输出 System.out.println(array[0]); for(int i=1;i<n;i++) { if(array[i] !=array[i-1]) System.out.println(array[i]); } } } }
注意:测试用例不止一组,用while(in.hasNext)。
四.
正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数。
import java.util.Scanner; public class test { public static void main(String[] args) { //两数的最小公倍数等于两数相乘除以最大公约数。 Scanner in = new Scanner(System.in); while(in.hasNext()) { int A=in.nextInt(); int B=in.nextInt(); int result=A*B; result=result/getGong(A,B); System.out.println(result); } } public static int getGong(int m, int n) { int i=m; while((m%i!=0)||(n%i!=0)) { i--; } return i; } }两数的最小公倍数等于两数相乘除以两数的最大公约数。
掌握两数最大公约数的算法。
五.
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
public class Solution { public boolean Find(int target, int [][] array) { int rows = array.length; int cols = array[0].length; int i=rows-1,j=0; while(i>=0 && j<cols){ if(target<array[i][j]) i--; else if(target>array[i][j]) j++; else return true; } return false; } }六.
请实现一个函数,将一个字符串中的空格替换成“ ”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We Are Happy。
public class Solution { public String replaceSpace(StringBuffer str) { String sti = str.toString(); char[] strChar = sti.toCharArray(); StringBuffer stb = new StringBuffer(); for(int i=0;i<strChar.length;i++){ if(strChar[i]==' '){ stb.append(" "); }else{ stb.append(strChar[i]); } } return stb.toString(); } }七
package test720; import java.util.Scanner; public class test720 { public static int fuction(int n) { if(n==1) return 0; if(n==2) return 1; return n/3 + fuction(n%3+n/3); //n/3是直接能换到的汽水数,n%3+n/3是新换到的汽水瓶子和上次换剩下的 } public static void main(String[] args) { Scanner scan= new Scanner(System.in); while(scan.hasNext()) { int blank=scan.nextInt(); if(blank!=0) { System.out.println(fuction(blank)); } } scan.close(); } }八
package test720; import java.util.Scanner; public class test720_2 { public static void main(String[] args) { Scanner scan=new Scanner(System.in); while(scan.hasNextLine()) { String str=scan.next(); String substr=str.substring(2); int result=Integer.parseInt(substr,16); System.out.println(result); } } }substring(x)是从字符串的的第x个字符截取
substring(x,y)是从x到y前的位置停止
Integer.parseInt(str,dex), Integer.parseInt(String)就是将String字符类型数据转换为Integer整型数据。
九
package test; import java.util.Scanner; import java.util.TreeMap; public class test { public static void main(String[] args) { Scanner in=new Scanner(System.in); int count=in.nextInt(); TreeMap<Integer, Integer> map=new TreeMap<Integer,Integer>(); while(in.hasNext()) { int key=in.nextInt(); int value=in.nextInt(); if(map.containsKey(key)) { map.put(key, value+map.get(key)); } else { map.put(key, value); } } for(int key:map.keySet()) { System.out.println(key+" "+map.get(key)); } } }TreeMap基于红黑树(Red-Black tree)实现。该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。 TreeMap的基本操作 containsKey、get、put 和 remove 的时间复杂度是 log(n) 。 另外,TreeMap是非同步的。 它的iterator 方法返回的迭代器是fail-fastl的。
十 删数
有一个数组a[N]顺序存放0~N-1,要求每隔两个数删掉一个数,到末尾时循环至开头继续进行,求最后一个被删掉的数的原始下标位置。以8个数(N=7)为例:{0,1,2,3,4,5,6,7},0->1->2(删除)->3->4->5(删除)->6->7->0(删除),如此循环直到最后一个数被删除。
输入:每组数据为一行一个整数n(小于等于1000),为数组成员数,如果大于1000,则对a[999]进行计算。
输出:一行输出最后一个被删掉的数的原始下标位置。
package train; import java.util.*; public class test803 { public static void main(String args[]) { Scanner scan = new Scanner(System.in); while(scan.hasNext()) { int num=scan.nextInt(); if(num>1000) num=999; ArrayList<Integer> list = new ArrayList<Integer>(); for(int i=0;i<num;i++) { list.add(i); } int i=0; while(list.size()>1) { i=(i+2)%list.size(); list.remove(i); } System.out.println(list.get(0)); } } }ArrayList类是一个动态数组类型,也就是说,ArrayList对象既有数组的特征,也有链表的特征。可以随时从链表中添加或删除一个元素。ArrayList实现了List接口。
大家知道,数组是静态的,数组被初始化之后,数组长度就不能再改变了。ArrayList是可以动态改变大小的。那么,什么时候使用Array(数组),什么时候使用ArrayList?答案是:当我们不知道到底有多少个数据元素的时候,就可使用ArrayList;如果知道数据集合有多少个元素,就用数组。
1.创建一个空的数组链表,用来存放String类型的对象,那么你可以像下面这样做:
ArrayList<String> list = new ArrayList<String>();
2.如果你需要创建一个指定初始容量的数组链表,你可以像下面这样做:
ArrayList<Integer> list = new ArrayList<Integer>(7);
注意:ArrayList类只支持对象类型,不支持 基础数据类型。就是说ArrayList对象只能存放对象,不能存放基础数据类型的数据。
解法思路:
取余操作,实现循环删数。
参考java官方API
二
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
import java.util.ArrayList; import java.util.Stack; public class Solution { public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { Stack<ListNode> stack = new Stack<ListNode>(); ArrayList<Integer> list=new ArrayList<Integer>(); ListNode current=listNode; while(current!=null){ stack.push(current); current=current.next; } while(!stack.isEmpty()){ list.add(new Integer(stack.pop().val)); } return list; } }利用栈的输出顺序。