多题目

阅读程序


01 #include <iostream>

02

03 using namespace std;

04

05 int n, k;

06

07 int solve1()

08 {

09     int l = 0, r = n;

10     while (l <= r) {

11         int mid = (l + r) / 2;

12         if (mid * mid <= n) l = mid + 1;

13         else r = mid - 1;

14     }

15     return l - 1;

16 }

17

18 double solve2(double x)

19 {

20     if (x == 0) return x;

21     for (int i = 0; i < k; i++)

22         x = (x + n / x) / 2;

23     return x;

24 }

25

26 int main()

27 {

28     cin >> n >> k;

29     double ans = solve2(solve1());

30     cout << ans << ' ' << (ans * ans == n) << endl;

31     return 0;

32 }

//这题求得是平方根,比较好理解的;

假设 int 为 32 位有符号整数类型,输入的 n 是不超过 47000 的自然数、 k 是不超过 int 表示范围的自然数,完成下面的判断题和单选题:

第1题 判断

该算法最准确的时间复杂度分析结果为 O(logn+k)

A.
正确
B.
错误

第2题 判断

当输入为“ 9801 1 ”时,输出的第一个数为“ 99 ”。

A.
正确
B.
错误

第3题 判断

对于任意输入的 n ,随着所输入 k 的增大,输出的第二个数会变成“ 1 ”。( )

A.
正确
B.
错误

第4题 判断

该程序有存在缺陷。当输入的 n 过大时,第 12 行的乘法有可能溢出,因此应当将mid 强制转换为 64 位整数再计算。( )

A.
正确
B.
错误

第5题 单选

当输入为“ 2 1 ”时,输出的第一个数最接近( )。

A.

1

B.

1.414

C.

1.5

D.

2

第6题 单选

当输入为“ 3 10 ”时,输出的第一个数最接近( )。

A.

1.7

B.

1.732

C.

1.75

D.

2

第7题 单选

当输入为“ 256 11 ”时,输出的第一个数( )。

A.

等于 16

B.

接近但小于 16

C.

接近但大于 16

D.

前三种情况都有可能

发表评论

登录 后再回复