第 1 章 绪论 习题解答 1.1 试写一个算法, 自大到小依次输出顺序读入的三个数 X、 Y 和 Z 的值。 【解答】 void Desceding(int &x, int &y, int &z) { // 将 x、 y 和 z 按从大到小的顺序排列 if (x sqrt(n)) printf("%d is a prime number", n) else printf("%d is not a prime number", n); }// prime 【解答】 最坏情况下 O(sqrt(n)) (2) float sum1(int n) { // 计算 1! +2! +…+n! p=1; sum1=0; for (i=1; i<=n; ++i) { p=p*i; sum1=sum1+p; } }// sum1 【解答】 O(n) (3) float sum2(int n) { // 计算 1! +2! +…+n! sum2=0; for (i=1; i<=n; ++i) { p=1; for (j=1; j<=i; ++j) p=p*j; sum2=sum2+p; } }//sum2 【解答】 O(n2) (4) void sort (int a[], int n) { // 将数组 a 中的元素按自小到大的顺序排列 for (i=1; i<=n-1; ++i) { k=i; for (j=i+1; j<=n; ++j) if (a[j]j) { x=a[i]; a[i]=a[k]; a[k]=x; } } }//sort 【解答】 O(n2) (5) void matrimult (a[m][n], b[n][l], c[m][l], int m, int n, int l) { // a 为 m×n 阶的矩阵, b 为 n×l 阶的矩阵, c 为 m×l 阶的矩阵。 计算 c=a*b for (i=1; i<=m; ++i) for (j=1; j<=l; ++j) c[i,j]=0; for (i=1; i<=m; ++i) for (j=1; j<=l; ++j) for (k=1; k<=n; ++k) c[i,j]=c[i,j]+a[i,k]*b[k,i]; }// matrimult 【解答】 O(n3)