算法分析(含答案)笔试题 (3)

请根据注释,编码实现下面类的方法
// 这个类用于存取一组权限,每个权限用非负整数表示的.这组枳限存储在
// righiString 属性中。如果权限 N 权限存在,rightString 第 N 个字符为“1”,
否则, 为空格。
class RightStore {
public String righString = "";
// 如果传入的权限 right 存在,该方法返回 true.否期,为 false.,
// right 为传入的权限的整数值.
public boolean getRight(int right) {
return true; }
// 该方法存储或消除传入的权限.如果 value 为 true,存储传入的权限,
// 否则淸除该权限.
// right 为传入的权限的整数值.
public void setRight(int right, boolean value) {
} }
思路说明:我们首先要读懂这道题的意思:righString 这个字符串是用来存储一系列权
限的,并且权限的取值只有两种:有和没有;在 righString 中使用字符‘1’表示有权
限,字符空格‘ ’表示没有权限。举个例子:如果 righString 的长度为 3,第一位表示
对订单系统是否有权限,第二位表示对人员管理系统是否有权限,第三位表示对库存系
统是否有权限。而方法中的 int right 参数则表示的是字符串的第几位。
上边这些搞明白之后,方法的编写就简单多了。
public class RightStore {
public String righString = "";
public boolean getRight(int right) {
//先求得第 right 个字符
char ch = righString.charAt(right - 1);
//如果 ch 为\'1\',返回 true,否则返回 false
return ch == \'1\'; }
public void setRight(int right, boolean value) {
//如果 value 为 true,存储传入的权限,否则消除权限(改为空格)
righString.replace(righString.charAt(right - 1), value ?
\'1\' : \' \');
} }

二分法查询(递归实现)
思路说明:假设在一个已经排好序的有序序列(N 个元素,升序排列),首先让序列中的中
间的元素与需要查找的关键字进行比较,如果相等,则查找成功,否则利用中间位置将
序列分成两个子序列,如果待查找的关键字小于中间的元素,则在前一个子序列中同样
的方法进一步查找,如果待查找的关键字大于中间的元素,则在后一个子序列中同样的
方法进一步查找,重复以上过程一直到查找结束!
import java.util.Scanner;
public class TestBinarySearchRecursion {
public static void main(String[] args) {
int[] a = { 1, 3, 5, 7, 9, 11, 13 };
System.out.print("请输入要查找的元素:");
int e = new Scanner(System.in).nextInt();
int index = binarySearch(a, 0, a.length - 1, e);
System.out.println(index != -1 ? "元素索引为" + index : "
没有该元素");
}
private static int binarySearch(int[] a, int low, int high,
int e) {
int mid = 0;
if (low <= high) {
mid = (low + high) / 2;
if (a[mid] == e) {
return mid;
} else if (a[mid] > e) {
return binarySearch(a, low, mid - 1, e);
} else {
return binarySearch(a, mid + 1, high, e);
} }
return -1;
} }

编写一段 Java 程序,把一句英语中的每个单词中的字母次序倒转,单词
次序保持不变,例入输入为“There is a dog.”,输出结果应该是“erehT si
a god.”要求不使用 Java 的库函数,例如 String 类的 split,reverse 方
法。
函数形如:
public static String reverseWords(String input) {
String str = "";
return str; }
思路说明:将字符串转化成字符数组,然后根据数组中空格的位置判断每个单词所占的
索引范围,根据得到的索引将数组中的每个单词逆序后拼接到新的字符串中。
public class TestStringReverse{
public static void main(String[] args) {
String input = "There is a dog";
System.out.println("逆转后的字符串为:" +
reverseWords(input));
}
public static String reverseWords(String input) {
String str = "";
//将字符串转化成字符数组
char[] arr = input.toCharArray();
//index 用来记录每个单词的起始索引
int index = 0;
//遍历字符数组,将空格前边的单词挨个拼接到 str 中
for (int i = 0; i < arr.length; i++) {
if(arr[i] == \' \'){
//根据空格的位置将空格前边一个单词密续追加到 str 中
for(int j = i - 1; j >= index; j--){
str += arr[j];
}
//单词拼接完成后,拼接一个空格
str += \' \';
//让 index 指向下一个单词的起始位置
index = i + 1;
} }
//将最后一个单词拼接上
for(int i = arr.length - 1; i >= index; i--){
str += arr[i];
}
return str; } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgfxsw.html