编程题——1

xiaoxiao2021-02-28  37

一.

计算字符串最后一个单词的长度,单词以空格隔开。

输入:一行字符串,非空,长度小于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;    } }

利用栈的输出顺序。

 

转载请注明原文地址: https://www.6miu.com/read-2299984.html

最新回复(0)