CS61B srping 2018 disc01 sol https://sp18.datastructur.es/

1 int size = 27;// 声明一个 int 类型的 变量size ,并把27赋值给他
2 String name = "Fido";// 声明一个String类型的变量 ,并把“Fido”赋值给他
3 Dog myDog = new Dog(name, size);// 声明一个Dog类型的变量myDog,并调用Dog构造函数,分别把name和size传入其中,生成一个Dog类型的对象,并把该对象赋值给myDog
4 int x = size - 5;// 声明一个int 类型的变量x,将size-5的值计算出来并赋值给x;
5 if (x < 15) {//判断x和15的大小
6 myDog.bark(8);//如果x<15就调用myDog的bark方法,传入8
7 }             //
8              //
9 while (x > 3) {// 当x不小于等于3
10 x -= 1;// x自减1
11 myDog.play();//调用myDog的play方法
12 }             //
13              //
14 int[] numList = {2, 4, 6, 8};// 声明一个int[]类型的数组numList(也就是内部能包含的元素都是int类型的数组),并将2、4、6、8作为元素放入数组numList
15 System.out.print("Hello ");// 使用该方法在终端(或者standard output)输出"Hello "字符串 (并 terminate the lined)
16 System.out.println("Dog: " + name);// 输出"Dog: Fido"
17              //
18 System.out.println(numList[1]);// 输出4
19 if (numList[3] == 8) {// 判断numList第4个元素是不是8
20 System.out.println("potato");// 输出 "Potata"
21 }//


// 如果k=2, inputArray是 [3, 0, 4, 6, 3] ,mystery返回什么?

public static int mystery(int[] inputArray, int k) {
    int x = inputArray[k]; // x初始值是inputArray中第k个元素的值,
    int answer = k; // answer初始值是第“k”个元素的索引,也就是k
    int index = k + 1;// index是 k的下一个元素的索引
    while (index < inputArray.length) { //从第k+1个元素开始遍历数组,直到最后一个元素
    if (inputArray[index] < x) { //判断k之后的元素是否小于x,
    x = inputArray[index]; //如果小于x,就更新x的值,x会一直跟踪最小值
    answer = index;//对应更新answer ,answer一直跟踪k之后最小的元素对应的索引值。
    }
    index = index + 1;//index自加用于遍历下一个元素
    }
    return answer;/最后返回的answer就是遍历查找到的 k索引之后最小的值对应的索引
    }

mymystery 返回4; 这个函数mystery 的功能是,找到inputArray第k个元素之后(含)之后最小的元素的索引。


  1. 如果 inputArray是[3, 0, 4, 6, 3], mystery2 返回什么?
public static void mystery2(int[] inputArray) {
int index = 0; // 初始index是0
while (index < inputArray.length) { 从0开始遍历 inputArray
int targetIndex = mystery(inputArray, index); // targetIndex 会被赋值为inputArray中的最小元素的索引 (看看上面mystery的作用)
int temp = inputArray[targetIndex]; // temp会被赋值为 当期(从第index索引开始找到的)最小元素的对应值
inputArray[targetIndex] = inputArray[index]; //把 最小索引处的元素 赋值为 第index个元素
inputArray[index] = temp; //把第index个元素 赋值为 当前最小元素值
index = index + 1; //index自加,
}
}

//mystery2是一个排序的函数, 所以最后返回[0,3,3,4,6]


以如下函数签名,编写一个函数,返回第n个 斐波那契数
public static int fib(int n) {}
解答:

public static int fib(int n) {
   if(n<=1){
        return n
    }
    return fib(n-2)+fib(n-1)
}

//or
public static int fib(int n) {
   int pre =0;
   int mid =pre;
   int next=1;

while(n!=0) {

  pre =next;
next = mid+next;
mid = pre;
n-=1;
}
return pre;
}


5.按照如下函数签名,编写一个 fib2 程序,其中n是指要返回数列中的第n个数,k是从某处开始的索引指,当从索引0开始,那么f0,f1可以是数列中(0、1、1、2、3、5、8、13)的0 和1
public static int fib2(int n, int k, int f0, int f1)

解答:

public static void fib2(n,k,f0,f1){
  if(n==k){
return f0}
else
return fib2(n,k+1,f1,f0+f1)
}

src:

disc2 sol





posted @ 2024-11-26 10:28  刘老六  阅读(26)  评论(0)    收藏  举报