携程编程题汇总

18.05.16

题目1:

给定一个整形数组,将数组中所有的“0”移动到末尾,非0项保持不动,在原数组上进行移动,勿创建新数组。
输入:第一行为数组长度,后续每一行为数组的一条记录
输出:调整后的数组内容
样例:
输入:
4
0
7
0
2
输出
7
2
0
0

思路:

毫无思路可言:将所有非0元素按照顺序向前移动,需要完成一轮遍历+前移,一轮赋0

控制台输入好难啊qaq

代码:

import java.util.Scanner;

class Main(){
	public static void main(String[] args){
		Scanner in = new Scanner(System.in);
		int n =0;
		n =Integer.parseInt(in.nextLine());//不能直接读取nextInt不然容易在数组的第一位读取错误:For input string "",我也不会解决
		StringBuffer sb = new StringBuffer();
		int count=n;
		while(count-->0)
			sb.append(in.nextLine().append(",");
			
		//去除str左右两边的预留空格(不然在分割str为数组的时候第一个位置上总有一个"",后期不可以进行数组转换).trim只能去除半角空格
		  String[] arr = sb.toString().trim().split(",");	
		  	
		  int[] a = new int[n];
		  for(int i=0;i

别人的代码:

//由于i代表的是从尾部开始的非0元素,j代表整个的一趟遍历
//j<=i总成立;如果不存在0,则i=j;如果存在0,则j0;--j){
	if(char[j]=='0'){
		char temp = char[i];
		char[i] = char[j];
		char[j]=temp;
		i--;
	}
}



题目2:

给定一个N*N的二维矩阵,将该矩阵进行顺时针旋转90度
样例输入
1 4 7
2 5 8
3 6 9
输出:

思路:

输入控制:(本题输入控制是难点)

1、先用Scanner读取第一行的输入数据,然后通过空格拆分后能得到二维矩阵的大小N 2、第二行后一个一个的读取输入数据
问题分析:位置为[i][j]的数字经过旋转后,到了[j][N-1-i]

  • next,nextInt,nextLine区别

next()、nextInt()和nextLine()的使用注意事项: https://blog.csdn.net/m0_37402140/article/details/72801477

代码:

import java.util.Scanner;

class Main{  
  public static void main(String[] args) {
     Scanner in = new Scanner(System.in);
     //本题从控制台读取输入是关键
     while(in.hasNext()) {//写在in.hasNext中无法跳出循环,所以整个过程都在while中进行
	String line = in.nextLine();
   	String[] str = line.split(" ");
   	int n = str.length;
   	int[][] nums = new int[n][n];
   	for(int i=0;i

你可能感兴趣的:(笔经合计)