1.数字打印-规律题
java代码:
package zhongxing; publicclass zhongxingTest8 { publicstaticvoid main(String[] args){ int rows =6; patternPrint(rows); } publicstaticvoid patternPrint(int rows){ int mid=rows-1; for(int i=1;i<=rows;i++) { if(i%2==1) { System.out.print(i); for(int j =0; j < mid; j++){ System.out.print(i); } System.out.println(i+1); }else{ System.out.print(i+1); for(int j =0; j < mid; j++){ System.out.print(i); } System.out.println(i); } } } }
2.SJF-最短作业优先java代码:
1 package zhongxing; 2 publicclass zhongxingTest9 { 3 publicstaticvoid main(String[] args){ 4 int[] requestTimes ={0,2,4,5}; 5 int[] durations ={7,4,1,4}; 6 float averageWaitingTime = waitingTimeSJF(requestTimes, durations); 7 System.out.println(averageWaitingTime); 8 } 9 /**10 *11 * @param requestTimes 任务提交时间12 * @param durations 任务服务时间13 * @return14 */15 publicstaticfloat waitingTimeSJF(int[] requestTimes,int[] durations){16 if(requestTimes ==null|| durations ==null)17 return-1;18 if(requestTimes.length != durations.length)19 return-1;20 int n = requestTimes.length;21 //这个地方得用clone()方法。这样才是深拷贝。直接复制是浅拷贝,只是对数组的一个引用。22 int[] durationTimes = durations.clone();23 int[] startTimes =newint[n];// 开始时间24 int[] endTime =newint[n];// 结束时间25 int[] waitingTime =newint[n];// 等待时间26 int[] cycleTime =newint[n];// 周转时间27 // 第一个执行任务的开始时间、结束时间、等待时间28 startTimes[0]= requestTimes[0];29 endTime[0]= startTimes[0]+ durations[0];30 waitingTime[0]=0;31 /** 核心代码 **/32 int lastIndex =0;// 上一次执行任务的索引33 int minIndex =0;// 最短任务的索引34 for(int i =1; i < n; i++){35 minIndex = getMinIndex(durations);// 最短任务索引为当前任务36 startTimes[minIndex]= endTime[lastIndex];// 当前任务的开始时间为上一个任务的结束时间37 endTime[minIndex]= startTimes[minIndex]+ durationTimes[minIndex];// 结束时间 = 开始时间 + 服务时间38 waitingTime[minIndex]= startTimes[minIndex]- requestTimes[minIndex];// 等待时间 = 开始时间 - 提交时间39 cycleTime[minIndex]= endTime[minIndex]- requestTimes[minIndex];// 周转时间 = 结束时间 - 提交时间40 lastIndex = minIndex;// 更新当前任务索引为下一次循环中的“上一次任务索引”41 }42 // 计算平均等待时间43 int s =0;44 float averageTime =0;45 for(int i : waitingTime){46 s += i;47 averageTime =(float) s /(float) n;48 }49 return averageTime;50 }51 // 获取最短任务索引,获取完成之后,该任务的服务时间置为最大值,从下一次寻找最短任务的过程中排除。52 publicstaticint getMinIndex(int[] arr){53 if(arr ==null)54 return-1;55 int minValue =Integer.MAX_VALUE;// 最短任务值56 int minIndex =0;57 for(int i =1; i < arr.length; i++){58 if(arr[i]< minValue){59 minValue = arr[i];60 minIndex = i;61 }62 }63 arr[minIndex]=Integer.MAX_VALUE;// 该任务的服务时间置为最大值,从下一次寻找最短任务的过程中排除。64 return minIndex;// 返回索引65 }66 }
上面的代码在测试的时候测试用例没有完全通过,因为少考虑了特殊情况。
这个情况就是:
可能出现求出的最小值对应的开始时间大于上个任务结束时间。这样的情况就没得等待时间了。 1 package zhongxing; 2 publicclass zhongxingTest91 { 3 publicstaticvoid main(String[] args){ 4 int[] requestTimes ={0,1,3,9}; 5 int[] durations ={2,1,7,5}; 6 float averageWaitingTime = waitingTimeSJF(requestTimes, durations); 7 System.out.println(averageWaitingTime); 8 } 9 /**10 *11 * @param requestTimes 任务提交时间12 * @param durations 任务服务时间13 * @return14 */15 publicstaticfloat waitingTimeSJF(int[] requestTimes,int[] durations){16 if(requestTimes ==null|| durations ==null){17 return-1;18 }19 if(requestTimes.length != durations.length){20 return-1;21 }22 int n = requestTimes.length;23 //这个地方得用clone()方法。这样才是深拷贝。直接复制是浅拷贝,只是对数组的一个引用。24 int[] durationTimes = durations.clone();25 int[] startTimes =newint[n];// 开始时间26 int[] endTime =newint[n];// 结束时间27 int[] waitingTime =newint[n];// 等待时间28 int[] cycleTime =newint[n];// 周转时间29 // 第一个执行任务的开始时间、结束时间、等待时间30 startTimes[0]= requestTimes[0];31 endTime[0]= startTimes[0]+ durations[0];32 waitingTime[0]=0;33 /** 核心代码 **/34 int lastIndex =0;// 上一次执行任务的索引35 int minIndex =0;// 最短任务的索引36 for(int i =1; i < n; i++){37 //minIndex = getMinIndex(durations); // 作曲最短任务索引为当前任务38 //服务时间,提交时间,结束时间39 minIndex = getMinIndex(durations,requestTimes,endTime[lastIndex]);40 startTimes[minIndex]= endTime[lastIndex];// 当前任务的开始时间为上一个任务的结束时间41 endTime[minIndex]= startTimes[minIndex]+ durationTimes[minIndex];// 结束时间 = 开始时间 + 服务时间42 waitingTime[minIndex]= startTimes[minIndex]- requestTimes[minIndex];// 等待时间 = 开始时间 - 提交时间43 cycleTime[minIndex]= endTime[minIndex]- requestTimes[minIndex];// 周转时间 = 结束时间 - 提交时间44 lastIndex = minIndex;// 更新当前任务索引为下一次循环中的“上一次任务索引”45 }46 // 计算平均等待时间47 int s =0;48 float averageTime =0;49 for(int i : waitingTime){50 s += i;51 averageTime =(float) s /(float) n;52 }53 return averageTime;54 }55 // 获取最短任务索引,获取完成之后,该任务的服务时间置为最大值,从下一次寻找最短任务的过程中排除。56 //这个地方要考虑特殊情况,可能出现求出的最小值对应的开始时间大于上个任务结束时间。考试的时候没有考虑到,所以测试用例不能完全通过57 publicstaticint getMinIndex(int[] durations,int[] requestTimes,int endtime){58 int minValue =Integer.MAX_VALUE;59 int minIndex =0;60 for(int i =1; i < durations.length; i++){61 //只有提交时间是小于上一个任务的结束时间,这个任务才需要等待,才有等待时间。否则是不需要等待的。也就是我们下面的第二个判断条件62 if(durations[i]< minValue && requestTimes[i]<=endtime){63 minValue = durations[i];64 minIndex = i;65 }66 }67 //置成最大,避免下次重复选中了这个任务68 durations[minIndex]=Integer.MAX_VALUE;69 return minIndex;70 }71 }
3.矩阵反转某个图像通过一个整数组成的m*n矩阵表示,其中每个整数表示一个像素值。写出一种方法,根据flag变量的值将图像向右或者向左旋转90°。如果flag值为0,则向左旋转,如果flag为1,则向右旋转。
函数rotatePictureMethod的输入分别由矩阵matrix、矩阵的维度m和n以及flag的值组成。
函数应返回一个指向二维矩阵指针,该矩阵是按照flag值旋转后的结果矩阵而动态分配的。
示例:
如果标志flag=1且m=3,n=3,输入矩阵
1 2 3
4 5 6
7 8 9
输出矩阵
7 4 1
8 5 2
9 6 3
java代码:
1 publicclass zhongxingTest7 { 2 /** 3 * 中兴的题是不需要sc得到输入的,都是封装好的 4 * 本题实质上就是对数组的旋转 5 * @param args 6 */ 7 publicstaticvoid main(String[] args){ 8 // TODO Auto-generated method stub 9 /*Scanner sc = new Scanner(System.in);10 while(sc.hasNextLine()){11 String s = sc.nextLine();12 }*/13 int[][]matrix ={14 {1,2,3},15 {4,5,6},16 {7,8,9}};17 int m =3;18 int n=3;19 int flag =1;20 int[][]mat = rotatePictureMethod(matrix,m,n,flag);21 //对数组的循环遍历输出22 for(int i=0;i<mat.length;i++){23 for(int j =0;j<mat[0].length-1;j++){24 System.out.print(mat[i][j]+" ");25 }26 System.out.println(mat[i][mat[0].length-1]);27 }28 }29 //关键是下面的赋值规律30 publicstaticint[][]rotatePictureMethod(int[][]matrix,int m,int n,int flag){31 //flag值为0,则向左旋转,如果flag为1,则向右旋转32 int[][]matrix10 =newint[n][m];33 if(flag ==1){//右转34 for(int i=0;i<m;++i){35 for(int j =0;j<n;j++){36 //这部分是整个代码的核心37 matrix10[n-1-j][m-1-i]= matrix[i][n-1-j];38 }39 }40 }else{//左转41 for(int i=0;i<m;++i){42 for(int j =0;j<n;j++){43 matrix10[n-1-j][m-1-i]= matrix[m-1-i][j];44 }45 }46 }47 return matrix10;48 }49 }50 51
以上内容为原创,转载请注明地址:http://www.cnblogs.com/coderli/p/f93ad2f8b0dd72aa5a997c766a6a95ac.html
来自为知笔记(Wiz)
附件列表
原标题:2017中兴校招编程题
关键词: