编程题——1

一.

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

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

六.

请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

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("%20");
            }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;
 
 }
}

利用栈的输出顺序。

猜你喜欢

转载自blog.csdn.net/Ella7/article/details/80895984