第三次过程性考核
2018-11-03 19:39 POOOOO 阅读(477) 评论(0) 编辑 收藏 举报第三次过程性考核
-------常用,实用类
码云地址:https://gitee.com/Mchain/projects
7-4 交换最小值和最大值 (9 分)
本题要求编写程序,先将输入的一系列整数中的最小值与第一个数交换,然后将最大值与最后一个数交换,最后输出交换后的序列。
注意:题目保证最大和最小值都是唯一的。
输入格式:
输入在第一行中给出一个正整数N(≤10),第二行给出N个整数,数字间以空格分隔。
输出格式:
在一行中顺序输出交换后的序列,每个整数后跟一个空格。
输入样例:
5
8 2 5 1 4
输出样例:
1 2 5 4 8
程序设计思路:通过交换下角标的方法实现交换最大值和最小值,先通过循环比较,符合条件后,找到最大值和最小值的下角标,然后交换即可。
代码如下:
import java.util.Scanner; public class Main{ public static void main(String []args){ int min,max; int a[]; Scanner k=new Scanner(System.in); int n=k.nextInt(); a=new int[n]; for(int i=0;i<n;i++){ a[i]=k.nextInt(); } max=0; min=0; for(int i=1;i<n;i++){ if(a[i]>a[max]){ max=i; //找到最大值下角标 } } int c=a[max]; //定义新变量c用于交换 a[max]=a[n-1]; a[n-1]=c; for(int i=1;i<n;i++){ if(a[i]<a[min]){ min=i; //找到最小值下角标 } } int b=a[min]; //定义新变量b,用于交换 a[min]=a[0]; a[0]=b; for(int i=0;i<n;i++){ System.out.print(a[i]+" "); } } }
运行结果:
7-1 简化的插入排序 (8 分)
本题要求编写程序,将一个给定的整数插到原本有序的整数序列中,使结果序列仍然有序。
输入格式:
输入在第一行先给出非负整数N(<10);第二行给出N个从小到大排好顺序的整数;第三行给出一个整数X。
输出格式:
在一行内输出将X插入后仍然从小到大有序的整数序列,每个数字后面有一个空格。
输入样例:
5
1 2 4 5 7
3
输出样例:
1 2 3 4 5 7
程序设计思路:插入数后,原序列长度加1,让插入的数,与原序列数一一进行比较,选好插入的位置。
代码如下:
import java.util.*; public class Main{ public static void main(String[] args){ Scanner read=new Scanner(System.in); int n=read.nextInt(); int a[]=new int[n+1]; int i; for(i=0;i<n;i++){ a[i]=read.nextInt(); } a[n]=read.nextInt(); Arrays.sort(a); for(i=0;i<=n;i++){ System.out.print(a[i]+" "); } } }
运行结果:
7-2 IP地址转换 (12 分)
一个IP地址是用四个字节(每个字节8个位)的二进制码组成。请将32位二进制码表示的IP地址转换为十进制格式表示的IP地址输出。
输入格式:
输入在一行中给出32位二进制字符串。
输出格式:
在一行中输出十进制格式的IP地址,其由4个十进制数组成(分别对应4个8位的二进制数),中间用“.”分隔开。
输入样例:
11001100100101000001010101110010
输出样例:
204.148.21.114
程序设计思路:考试时,没做出来。进制转换平时会做,但无法用代码实现,请教了同学,用了转换的新语法
代码如下:
import java.util.Scanner; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Scanner in = new Scanner(System.in); String n = in.nextLine(); int n1 = Integer.parseInt(n.substring(0, 8),2);//将二进制转为十进制 int n2 = Integer.parseInt(n.substring(8, 16),2); int n3 = Integer.parseInt(n.substring(16, 24),2); int n4 = Integer.parseInt(n.substring(24, 32),2); System.out.printf("%d.%d.%d.%d", n1,n2,n3,n4); } }
运行结果:
7-5 说反话-加强版 (20 分)
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:
测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。
输出格式:
每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有1个空格。
输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello
程序设计思路:这道题一直运行超时,与同学探讨解决方法后,仍未解决。
代码如下:
import java.io.IOException; import java.text.ParseException; import java.util.Scanner; public class Main { public static void main(String[] args) throws ParseException, IOException { Scanner scanner = new Scanner(System.in); String str = scanner.nextLine().trim(); String[] strs = str.split(" +"); for(int i=strs.length-1;i>=0;--i) { System.out.print(strs[i]); if(i!=0) System.out.print(" "); } } }
阶段性总结:
这阶段的学习一般般,不得不说java挺难。考试的时候大部分时间都浪费在了第一题,交换下角标的时候整混了,刚开始的想法在找出下角标后,统一进行交换。后来交换乱了,最后是在找到其中一个下角标的时候,就进行交换,然后再找下一个下角标,在交换。
与前阶段学习相比,java的编写与思路比之前强很多了,但仍需努力。
学习内容 | 代码行数 | 博客字数 |
第一次考核 | 400 | 346 |
第二次考核 | 126 | 340 |
第三次考核 | 82 | 350 |
数组,字符串 | 147 | 244 |