最近快要实习面试了,赶紧打开各类面经刷题……
从今天开始会记录所刷编程题的内容及我自己调试出来的代码……
如有bug或优化方法,欢迎评论区交流~
编程题一:
输入www.baidu.com,输出com.baidu.www
Java示例代码:
import java.util.Scanner;
public class Reverse {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int i,j,tempNum = 0;
String []strings = new String[3];
System.out.println("请输入您要输入的网址:");
String temp = sc.nextLine();
for(i=0;i<3;i++){
strings[i] = "";
for (j=tempNum;j<temp.length();j++){
if(String.valueOf(temp.charAt(j)).equals(".")){
tempNum++;
break;
}
else{
strings[i] += String.valueOf(temp.charAt(j));
tempNum++;
}
}
}
System.out.println("您所需的输出为:\n"+strings[2]+"."+strings[1]+"."+strings[0]);
}
}
//注意的知识点:
// return是退出现在的函数,break是当前的循环(for,while,repeat),直接结束循环,continue是循环里跳过这一次 直接执行下一次循环;
//Scanner输入字符串可以用next(),或者nextLine(),这两个读取的方式有区别;
// String类型判等要用A.equals(B);
// String类型读取字符串长度用String.length()方法;
// 读取每一位字符串要用charAT()方法;
// 储存其他类型的为字符串要用String.valueOf()方法
编程题二:
有一条公路,起点是0公里,终点是100公里。这条公路被划分为N段,每一段有不同的限速。现在他们从A公里处开始,到B公里处结束。请帮他们计算在不超过限速的情况下,最少需要多少时间完成这段路程。
输入:
1、第一行为公路划分的段数N
2、接下来N行,每行三个正整数,分别是起始点,终止点(前后两段一定保证是连续的),和限速值(单位:公里/小时)
3、紧接是要计算的起始点A,和终止点B
输出:
1、输出为一行,即从A到B需要的最少时间(单位:小时),精确到小数点后两位
Java示例代码
import java.util.Scanner;
class setLimit{
int Max = 100,N=0,A=0,B=0;//初始化最大段数,用户分段数,起点A、B
int [][]road = new int[3][Max];//一维为起点,二维为终点,三维为限速
Scanner sc = new Scanner(System.in);
setLimit(){
System.out.println("请输入需要分的段数:");
N = sc.nextInt();
}
void getNum(){
int i;
System.out.println("请依次输入每一段的起点、终点、限速值:");
for(i=0;i<N;i++){
road[0][i] = sc.nextInt();
road[1][i] = sc.nextInt();
road[2][i] = sc.nextInt();
}//输入数组
}
void getAB(){
System.out.println("请依次输入起始公里、终止公里:");
A = sc.nextInt();
B = sc.nextInt();
}
int getA_up(){
int i=0;
while(A>=road[0][i])
i++;
return i;
}
int getB_down(){
int i=0;
while(B>=road[0][i])
i++;
return i;
}
void getTime(int a, int b){
int i;
float time;
time = (float)((road[0][a]-A)/road[2][a-1])+(float) ((B-road[0][b-1])/road[2][b-1]);
for(i=a;i<b-1;i++)
time = time + ((float)(road[1][i]-road[0][i])/(float)road[2][i]);
System.out.println("从A到B所需的最短时间为:"+String.format("%.2f",time)+"(单位:小时)");
}
}
public class Race {
public static void main(String[] args){
setLimit N1 = new setLimit();
N1.getNum();
N1.getAB();
N1.getTime(N1.getA_up(),N1.getB_down());
}
}
//if((N > Max)||(N <= 0)){
// System.out.println("请检查输入段数是否超过上线100或为负数!");
// return;
// }
//road[0][0] = 0;
//road[1][N-1] = 100;
初始化起点与终点
// for(i=1;i<N-1;i++){
// temp0 = sc.nextInt();
// temp1 = sc.nextInt();
// while((temp0<=0)||(temp1<=0)||(temp0<=temp1)||(temp0!=road[0][i-1])){
// System.out.println("您输入的起点或终点存在异常,请重新输入!");
// temp0 = sc.nextInt();
// temp1 = sc.nextInt();
// }
// road[1][i] = temp1;
// road[0][i+1] = temp1;
// road[2][i] = sc.nextInt();
// }
//判断前后端点是否连续
// temp0为输入起点中间变量,temp1为输入终点中间变量
编程题三:
编写程序,实现输入一个数组和一个数n,将数组中出现次数超过n次的元素输出;
示例代码(Java):
import java.util.Scanner;
class base{
Scanner sc = new Scanner(System.in);
int setLength(){
System.out.println("请输入您想要创建的数组长度");
int length = sc.nextInt();
return length;
}
int[] setArray(int l){
int []arr = new int[l];
System.out.println("请依次输入数组各元素的数值:");
for(int i=0;i<l;i++)
arr[i] = sc.nextInt();
return arr;
}
int[] SortArr(int arr[] ){
int temp;
for(int i=0;i<arr.length-1;i++)
for(int j=0;j<arr.length-1-i;j++){
if(arr[j]>arr[j+1]){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
return arr;
}
int[] FindArr(int arr[]){
int []timesArr = new int[arr.length];
int node = 0,i;
for(i=0;i<arr.length;i++)
timesArr[i] = 0;
for(i=0;i<arr.length;i++){
if(arr[i] == arr[node])
timesArr[node]++;
else{
node = i;
timesArr[i] = 1;
}
}
return timesArr;
}
void PrintArrN(int arr0[],int arr1[]){
System.out.println("请输入一个数字n");
int n = sc.nextInt();
System.out.println("数组中输出超过n次的数据有:");
for(int i=0;i<arr0.length;i++)
if(arr1[i]>=n)
System.out.print(arr0[i]+" ");
}
}
public class arrPrint {
public static void main(String[] args){
base Base = new base();
int []arr0 = Base.SortArr(Base.setArray(Base.setLength()));
int []arr1 = Base.FindArr(arr0);
Base.PrintArrN(arr0,arr1);
}
}
emmmmmm……某编程大佬小哥哥说我分函数分的太细了……
原话:“不用一个输入还要分好几次,分太细了反而让你的代码不好看。”
Mark一下,以后改正。