麻省理工学院公开课:计算机科学及编程导论问题1

来源:互联网 发布:tensorflow 鸢尾花 编辑:程序博客网 时间:2024/04/29 17:06

1) 判断:


1.1. Any program that can be written using only function definitions and calls, the basic arithmetic operators, assignment, and conditionals will run in constant time.

任何用函数的定义和调用、基础算术符号、赋值和条件编写而成的程序,会在常数时间内运行。

错误。

递归话可能会是线性、对数级别的,O(n)或者O(2**n)这种。

常数指的是O(1)这种。


1.2. Newton’s method will always converge on a correct root of a function.

牛顿法总会收敛于函数的一个准确的根。

错误。

f(x)=1-x**2

f(x)=x**3-2x+2

都不行。

(来自wiki: https://en.wikipedia.org/wiki/Newton%27s_method#Mitigation_of_non-convergence)


1.3. In Python, dictionaries are immutable.

Python中,字典不可变。

错误,字典是可以变的。


1.4. The value of ‘math.sqrt(2.0)*math.sqrt(2.0) == 2.0’ is True.

错误。

math.sqrt(2.0)得出是一个近似2的平方根的数字;所以一个约等于2的平方根的数字的平方根不会等于2.。


1.5. One should always avoid iteration when a recursive solution is possible.

当递归可行时,必须总要避免迭代。

错误。

这是不一定的,根据个人需求和算法来决定。


1.6. Typically, the use of functions in a program reduces the total number of lines of code.

通常使用在程序中使用函数能减少编码行数。

对的。

通常是这样的,减少了重复的编程。


1.7. In Python, retrieving the value associated with a dictionary key takes roughly constant time.

Python中,用key值搜索字典花费的大概是常数时间。

对的。

搜索字典用的是hash表...



2) 思考compare1和compare 2的执行,a、b是float


def compare1(a, b):    if a < 0:        a = -a    if b < 0:        b = -b    res = (a == b)    if res:        print a, 'and', b, 'have the same absolute value.'    else:        print a, 'and', b, 'have different absolute values.'    return res"""------------------------------------------------------------------------------"""def absolute_value(n):    if n < 0:        n = -n    return ndef compare2(a, b):    res = absolute_value(a) == absolute_value(b)    if res:        print a, 'and', b, 'have the same absolute value.'    else:        print a, 'and', b, 'have different absolute values.'    return res


2.1) 对于所有可能是输入,compare1和compare2 返回的是同样的值吗?? 如果不是,给出不是的输入。

是的,返回的res是同样的值。


2.2)  对于所有可能是输入,compare1和compare2 打印的是同样的值吗?? 如果不是,给出不是的输入。

不一定,absolute_value(n)只是得出了a和b的绝对值,并没有像compare1那样把得出的绝对值再次赋值给a、b。

只要a、b其中有一个是负数,就不一样。



3) 思考函数f,x为正整数。


def f(x):    xs = str(x)                           # 将x转化为字符串,并赋值给xs    if len(xs) == 1:                      # 如果xs的长度等于1        return int(xs)                    # 返回整数化后的xs    n = int(xs[0]) + int(xs[1])           # 将字符串xs的第一个字符和第二个字符转化为整数后,它们的和赋值给n    if len(xs) == 2:                      # 如果字符串xs的长度是2        return n                          # 返回n    else:                                 # 其他        return n + f(xs[2:])              # 返回n加上从xs字符串第三个开始的f(x)函数

f(2112) 是什么值?

xs = "2112"

len(xs) = 4

n = 2 + 1 = 3

xs[2:] = "12"

len(xsxs[2:]) = 2

f(xs[2:] = 1 + 2 = 3

f(2112) = 3+3 =6



3.2. 写出函数f的说明。

当x有一位数时,返回x;

当x有两位数时,返回这个数字每位上的单独数字的和;

当x有三位数时候,先把第一位和第二位的数字相加,再加上第三位;

当x有四位数时候,先把第一位和第二位的数字相加,再加上第三位和第四位的和;

当x有五位数时候,先把第一位和第二位的数字相加,再加上第三位和第四位的和,再加上第五位。

这个函数就是把x的各位数字相加求和。



4) 写出一个函数first_N,只有一个正整数参数n。函数能打印出第n个完美平方不是偶数的数字。如果n是2,那么应该打印出1和9。


如果n = 2:

1*1=1 是

2*2=4 不是

3*3=9 是


如果n = 3:

1*1=1 是

2*2=4 不是

3*3=9 是

4*4=16不是

5*5=25是


def first_N(n):    count = 0    number = 1    while count < n:        perfect_sqr = number * number        if perfect_sqr % 2 != 0:            print perfect_sqr            count += 1        number += 1



5. 写一段伪代码,用穷举法来猜测变量的值。

for a in range(某个规定范围内):

if a 满足某个条件:

return a



6.) 写一个函数findSide(),满足询问用户矩形的面积和其中一个边长。返回另一边的边长,类型float。

def findSide():    a = float(raw_input("Please enter the area of the rectangle: "))    b = float(raw_input("Please enter the length of one side of the rectangle: "))    c = a / b    return c


7) 下列函数满足说明吗? 如果不,改成满足。


def f(L):    """Returns a copy of the list L without modifying L.""" # 用不改变数组L的方式,返回数组L的一份复制    result = []    for e in L: result.append(e)    return result

满足。



8) At McDonalds one can buy chicken nuggets in packages containing 6, 9 or 20 pieces. Write a Python function that accepts an integer, num, as an argument and decides whether or not it is possible to buy num nuggets at McDonalds.

麦当劳买鸡块,有6、9、20个鸡块的组合。写一个函数,整数参数num

def eq(num):    for a in range(0, num / 6 + 1):        for b in range(0, num / 9 + 1):            for c in range(0, num / 20 + 1):                if 6 * a + 9 * b + 20 * c == num:                    return True    return False


9) 为下列函数写说明,假设n是整数。

def f(n):    s = str(n)                        # 将n转化为字符串,并赋值给s    if len(s) <= 1: return s          # 如果s长度小于等于1,返回s    return s[-1] + f(int(s[:-1]))     # 否则返回s的倒数第一个字符串,再加上从倒数第二个开始的f(n)

这个函数就是将整数n变成字符串,然后把字符串的颠倒一下,例如最后位变第一位,第二位变倒数第二位。

0 0
原创粉丝点击