去哪网
题目描述
现在有一个数组,其值为从1到10000的连续增长的数字。出于某次偶然操作,导致这个数组中丢失了某三个元素,同时顺序被打乱,现在需要你用最快的方法找出丢失的这三个元素,并且将这三个元素根据从小到大重新拼接为一个新数字,计算其除以7的余数。 例:丢失的元素为336,10,8435,得到的新数字为103368435,除以七的余数为2。
输入描述:
输入数据为一行,包含9997个数字,空格隔开。
输出描述:
输出为一行,包含一个数字。
import java.util.HashSet; import java.util.Hashtable; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc=new Scanner(System.in); String line=sc.nextLine(); String[] data=line.split(" "); // int[] data_1=new int[data.length]; HashSet<Integer> data_1=new HashSet<>(); for (int i = 0; i < data.length; i++) { data_1.add(Integer.parseInt(data[i])); } int [] num=new int[3]; int t=0; for (int i = 1; i <=10000; i++) { if (!data_1.contains(i)) { num[t++]=i; if (t==3) { break; } } } String deString=""; for (int i = 0; i < num.length; i++) { deString=deString+num[i]; } System.out.println(Long.parseLong(deString)%7); } }
有一个X*Y的网格,小团要在此网格上从左上角到右下角,只能走格点且只能向右或向下走。请设计一个算法,计算小团有多少种走法。给定两个正整数int
x,int y,请返回小团的走法数目。
输入描述:
输入包括一行,逗号隔开的两个正整数x和y,取值范围[1,10]。
输出描述:
输出包括一行,为走法的数目。
示例1
输入
3 2
输出
10
import java.time.zone.ZoneRulesProvider; import java.util.HashSet; import java.util.Hashtable; import java.util.Scanner; public class Main { public static void main(String[] args) { System.out.println( countWays2(3, 2)); ; } public static int countWays(int x, int y) { if (x==0||y==0) { return 1; } else { return countWays(x-1, y)+countWays(x, y-1); } } public static int countWays2(int x, int y) { int[][] data=new int[x+1][y+1]; for (int i = 0; i <=x; i++) { data[i][0]=1; } for (int i = 0; i <=y; i++) { data[0][i]=1; } for (int i = 1; i <= x; i++) { for (int j = 1; j <= y; j++) { data[i][j]=data[i-1][j]+data[i][j-1]; } } return data[x][y]; } }
题目描述
酒店房间的价格录入是通过时间段来录入的,比如10月1日至10月7日800元,10月8日至10月20日500元,请实现以下函数int[][] merge(int[][] dateRangePrices),输入是某个酒店多个日期段的价格,每个日期段(终止日期大于等于起始日期)和对应的价格使用长度为3的数组来表示,比如[0, 19, 300], [10, 40, 250]分别表示从某天开始第1天到第20天价格都是300,第11天到第41天价格都是250,这些日期端有可能重复,重复的日期的价格以后面的为准, 请以以下规则合并并输出合并结果:
1.相邻两天的价格如果相同,那么这两个日期段应该合并
2.合并的结果应该以起始日期从小到大排序
1.相邻两天的价格如果相同,那么这两个日期段应该合并
2.合并的结果应该以起始日期从小到大排序
输入描述:
输入数据包括多行,如样例输入所示。
输出描述:
输出数据为一行,如样例输出所示
示例1
输出
复制[1, 3, 100],[4, 5, 110]
import java.io.IOException; import java.util.Scanner; public class Main { public static void main(String[] args) throws NumberFormatException, IOException { Scanner scanner=new Scanner(System.in); int[] s=new int[20000]; int max=0; while (scanner.hasNext()) { int start=scanner.nextInt(); int end=scanner.nextInt(); int data=scanner.nextInt(); for (int i = start; i <=end; i++) { s[i]=data;//覆盖以前的数据 } max=Math.max(end, max);//输入无序 } for (int i = 0; i < s.length; i++) { if (s[i]==0) { continue;//数组填不满 } int start=i; while(i<s.length&&s[i]==s[i+1]) { i++;//重复元素处理 } System.out.print("["+start+", "+i+", "+s[i]+"]");//打印 if (i!=max) { System.out.print(","); } } } }
题目描述
给定一个英文字符串,请写一段代码找出这个字符串中首先出现三次的那个英文字符(需要区分大小写)。
输入描述:
输入数据一个字符串,包括字母,数字等。
输出描述:
输出首先出现三次的那个英文字符
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc=new Scanner(System.in); int data[]=new int[200]; boolean flag=false; String s=sc.nextLine(); char[] data_1=s.toCharArray(); for (int i = 0; i < data_1.length; i++) { if (('A'<=data_1[i]&&data_1[i]<='Z')||('a'<=data_1[i]&&data_1[i]<='z')) { // System.out.println(data_1[i]); data[data_1[i]]++; for (int j = 0; j < data.length; j++) { if (data[j]>=3) { System.out.println((char)j); flag=true; break; } } if (flag) { break; } } } sc.close(); } }
题目描述:
输入:
2 3 1 1 4
输出
1 3
第一次跳的时候idnex为0 数值为2 可以跳1-2步 跳到index为1的3或index为2 的1 这时跳到index为1 的3 然后第二次三步跳到index为4 的4结束。
public class Main { public static void main(String[] args) throws Exception { Scanner in=new Scanner(System.in); while(in.hasNext()){ String line=in.nextLine(); String[] data=line.split(" "); int[] data_1=new int[data.length]; for (int i = 0; i < data.length; i++) { data_1[i]=Integer.parseInt(data[i]); } int x=0; int max=0,index=0; boolean flag=false; while(x < data_1.length) { int temp=data_1[x]; int[] data_2=new int[temp]; for (int j =x+ 1; j <=x+temp; j++) { if (j<data_1.length&&data_1[j]>max) { max=data_1[j]; index=j; } } if (max>data_1.length-x-1) { System.out.print(data_1.length-x-1); break; } if (index==data_1.length-1) { System.out.print(index-x); break; }else { System.out.print(index+" "); } x=index; } } } }