1024×768、每个像素用 24 位表示的未压缩位图图片,至少需要( )存储空间。1024×768×3=2359296 字节,即 2304KB=2.25MB。2^16=65536,所以要表示 65536 种不同颜色,至少需要 16 个二进制位。O(n)。n0,只有一个孩子的结点数为 n1,有两个孩子的结点数为 n2。二叉树中有 n0=n2+1,题目给出 n1=10,且 n0+n1+n2=53。代入得 (n2+1)+10+n2=53,所以 2n2=42,n2=21,因此 n0=22。C(7,2)=7×6/2=21,所以最多有 21 条边。101101.011 相等的十六进制数是( )101101 补成 0010 1101,得到 2D;小数部分 .011 补成 .0110,得到 .6,所以结果是 2D.6。david@163.com 符合这一格式。A 错在 ENIAC 使用电子管,不是集成电路;B 错在接入互联网需要 IP 地址,不一定需要域名;D 错在短信链接可能包含钓鱼或恶意内容,不能随意点击。ABCEFGHD,后序序列为 ABFHGEDC,则其前序序列为( )。C。在中序序列 ABCEFGHD 中,C 左边是 AB,右边是 EFGHD。左子树由中序 AB、后序 AB 得到前序 BA;右子树根为后序最后的 D,其左子树根为 E,再由 FGH 得到根 G、左右孩子 F 和 H,所以右子树前序为 DEGFH。合并得到前序序列 CBADEGFH。
C(12,5)=792 种。限制是甲、乙、丙不能三人同时入选,因此要减去三人都被选上的情况:甲、乙、丙已占 3 个名额,还需从其余 9 人中选 2 人,有 C(9,2)=36 种。所以符合条件的选法为 792-36=756。2^5-1=31 个结点;高度为 6 的二叉树最多有 2^6-1=63 个结点。61 介于 32 到 63 之间,所以高度为 6。T(n)=T(n-1)+n(n 为正整数)及 T(0)=1,则该算法的时间复杂度为( )。T(n)=1+1+2+...+n,主要项为 n(n+1)/2,所以时间复杂度为 O(n^2)。#include <iostream>using namespace std;int i,j,f,a[9],n=8;int main(){ for (int i = 1; i <=n; i++){ f=i%2; if(f==0)a[i]=0; else a[i]=1; for (int j = 1; j <=i; j++) if(f==0)a[i]=a[i]+j; else a[i]=a[i]*j; } for (int i = 1; i <=n; i++) printf("%5d",a[i]);return 0;}i 的奇偶性分别计算数组 a[i]:当 i 为偶数时累加 1+2+...+i,当 i 为奇数时累乘 1×2×...×i,最后依次输出 a[1] 到 a[8]。核心方法是双重循环,时间复杂度为 O(n^2)。f=i&1;,不影响运行结果。( )i,i%2 和 i&1 都能判断奇偶性,结果同为 0 或 1。cin、cout 等需要 std:: 命名空间限定的对象,因此删除 using namespace std; 不影响这段程序的主要运行逻辑。f 只有 0/1 两种取值。( )f=i%2,整数除以 2 的余数只可能是 0 或 1。1 3 6 10 120 21 5040 36。( )i 为偶数时,a[i] 为 1+2+...+i;当 i 为奇数时,a[i] 为 1×2×...×i。所以 a[1..8] 依次为 1,3,6,10,120,21,5040,36。n 次,内层循环第 i 次执行 i 次,总次数为 1+2+...+n,因此时间复杂度为 O(n^2)。#include <cstdio>using namespace std;int ack(int m,int n){ if(m==0)return n+1; else if(n==0)return ack(m-1,1); else return ack(m-1,ack(m,n-1));}int main(){ printf("%d\n",ack(3,4)); putchar('\n'); return 0;}ack(3,4) 的值。算法核心是按 m==0、n==0 和一般情况分三类递归,其中一般情况会先计算 ack(m,n-1),再作为参数继续计算 ack(m-1,...),递归增长非常快。ack(3,4) 改为 ack(-1,-1),程序能正常出结果。( )m==0 或 n==0 时有明确的终止路径。若从 ack(-1,-1) 开始,参数会继续向负数方向递归,无法正常到达基本情况。ack 函数增长很慢。( )ack(1,n)=n+2,ack(2,n)=2n+3,ack(3,n)=2^(n+3)-3,所以 ack(3,4)=2^7-3=125。ack(3,4) 修改为 ack(2,5),输出将为( )ack(2,n)=2n+3,可得 ack(2,5)=2×5+3=13。ack(3,4) 修改为 ack(1,4),输出将为( )ack(1,n)=n+2,所以 ack(1,4)=6。输入一个十进制正整数 n,然后将 n 转换为二进制数,最后统计二进制数的各位数字,看有多少位为 1,然后打印出总数。
输入样例:127;输出样例:7。十进制数 127 转换为二进制数 1111111,共有 7 个 1。
#include<bits/stdc++.h>using namespace std;int a[33],cnt;int main(){ int n,sum,x; cin>>n; cnt=0; ①; while(x>0) { a[②]=x%2; ③; } sum=0; for(int i=1;④;i++) if(a[i]==1) ⑤; cout<<sum<<endl; return 0;}a。随后遍历这些二进制位,遇到 1 就让 sum 加一,最终输出二进制表示中 1 的个数。核心算法是短除法取二进制位,时间复杂度为 O(log n)。x 除以 2 来取二进制各位,因此一开始要把输入的 n 赋给 x。cnt 加 1,并把当前位存入新的位置,所以用 a[++cnt]。x%2 后,要把 x 除以 2,继续处理下一位。a[1] 到 a[cnt] 中,统计时应遍历全部这些位置,所以循环条件是 i<=cnt。sum 加 1。