题目描述:
给定一数组a[N],我们希望构造数组b [N],其中b[j]=a[0]*a[1]…a[N-1] / a[j],在构造过程中,不允许使用除法:
要求O(1)空间复杂度和O(n)的时间复杂度;
除遍历计数器与a[N] b[N]外,不可使用新的变量(包括栈临时变量、堆空间和全局静态变量等);实现程序(主流编程语言任选)实现并简单描述。
代码:
#include <stdio.h> void PrintfArray(int a[], int n) { for (int i = 0; i < n; i++) printf("%5d ", a[i]); putchar('\n'); } int main() { const int MAXN = 5; int a[MAXN] = {1, 3, 5, 7, 9}; int b[MAXN]; printf("数组a为:\n"); PrintfArray(a, MAXN); b[0] = 1; int i; for (i = 1; i < MAXN; i++) b[i] = b[i - 1] * a[i - 1]; int temp = 1; for (i = MAXN - 2; i >= 0; i--) { temp *= a[i + 1]; b[i] *= temp; } printf("数组b为:\n"); PrintfArray(b, MAXN); return 0; }
分析:
设有数组大小为5。
对于第一个for循环
第一步:b[0] = 1;
第二步:b[1] = b[0] * a[0] = a[0]
第三步:b[2] = b[1] * a[1] = a[0] * a[1];
第四步:b[3] = b[2] * a[2] = a[0] * a[1] * a[2];
第五步:b[4] = b[3] * a[3] = a[0] * a[1] * a[2] * a[3];
然后对于第二个for循环
第一步
temp *= a[4] = a[4];
b[3] = b[3] * temp = a[0] * a[1] * a[2] * a[4];
第二步
temp *= a[3] = a[4] * a[3];
b[2] = b[2] * temp = a[0] * a[1] * a[4] * a[3];
第三步
temp *= a[2] = a[4] * a[3] * a[2];
b[1] = b[1] * temp = a[0] * a[4] * a[3] * a[2];
第四步
temp *= a[1] = a[4] * a[3] * a[2] * a[1];
b[0] = b[0] * temp = a[4] * a[3] * a[2] * a[1];
代码修改为:
把
for (i = MAXN - 2; i >= 0; i--) { temp *= a[i + 1]; b[i] *= temp; }
改为
for (i = MAXN - 1; i >= 1; i--) { b[i] *= b[0]; b[0] *= a[i]; }
参考转自:http://blog.csdn.net/morewindows/article/details/8742666
相关推荐
VB.NET中的除法运算符有两个:/(浮点除法)、\(整数除法) C#中的除法运算符只有一个:/(除法) VB.NET中的除法运算符与C#中的除法运算符存在很大的差异,使用时注意区分。 关于VB.NET中的除法运算符的介绍...
3. **算术操作**:Verilog提供了基本的算术运算符,如`*`(乘法)、`-`(减法)等,这些在除法器的实现中必不可少。设计者需要利用这些操作符进行乘法、减法和比较等操作。 4. **条件语句**:在5TS除法器中,会用到...
在C语言中,可以使用`%`运算符来求余数,`/`运算符来进行除法运算。然而,这两个运算符并不会同时返回商和余数,所以我们需要自定义函数来实现带余除法的功能。以下是一个简单的C语言函数示例,用于执行带余除法: ...
1. 整数除法:在Python 3中,两个整数之间的除法会返回一个浮点数结果,除非使用特殊的除法运算符`//`。例如,`10 // 3`将返回3,因为它只取整数部分,丢弃小数部分。然而,如果其中一个数字是浮点数,如`10.0 // 3`...
C语言提供了除法运算符“/”来求取商,以及取余运算符“%”来求取余数。但在某些情况下,特别是当被除数为负数时,直接使用这些运算符得到的结果可能不符合预期,因为C语言标准中,对负数的商取整是向零取整,而余数...
MATLAB中的除法运算符“/”默认执行浮点除法,这意味着任何整数除法都会被自动转换为浮点数。如果你需要执行整数除法,可以使用'fix'或'mod'函数。例如,`k = fix(a/b)`会返回商的整数部分,而`r = mod(a,b)`会返回...
用verilog语言编写出一个除法器的代码,并在modelsim中进行功能仿真,认真的完成实验报告。 二、 实验设备(环境)及要求: 在modelsim环境下编写代码与测试程序,并仿真; 在synplify pro下编译,设置硬件并综合。 ...
在计算机编程中,加法、减法、乘法和除法是基础的算术操作。在PB9中,你可以使用内置的数学函数或运算符来执行这些操作。例如,`+` 用于加法,`-` 用于减法,`*` 用于乘法,`/` 用于除法。表达式 "1+5*(2-3)" 展示了...
总结,整数乘除法练习器的实现涉及C语言的基本元素,包括数据类型、输入输出、运算符、控制流程、错误处理以及程序结构。通过这样的练习器,用户可以在实践中巩固对整数乘除法的理解,同时提高编程技能。
可以将除法与其他运算符结合使用,例如`=A1 + B1 / C1`。 7. **百分比除法** 如果需要将除法结果转换为百分比,可以使用乘以100%的方式,如`=A1/B1*100%`。 8. **分母为单元格范围的除法** 有时候需要将一个数值...
首先,我们需要了解JavaScript中的除法运算符 `/`。当两个数值进行除法运算时,如果被除数是整数,而除数为非零整数,那么结果将是一个浮点数。例如,`5 / 2` 结果为 `2.5`。然而,如果除数为零,JavaScript会抛出一...
由于直接使用除法运算符"/"可能会导致难以综合或者对时序产生不良影响,因此开发者通常会采用其他方法来实现除法运算,以确保电路在时钟周期内完成运算。 移位除法器是一种常用的实现方式,它通过移位和减法操作来...
* 浮点除法运算符的优先级别高于整数除法运算符。 例如,Private Sub Command1_Click() Dim A As Double A = 8 * 3 ^ 2 MsgBox A End Sub 字符串表达式 字符串表达式是由字符串运算符连接而成的式子。VB中只有...
3. **运算符**:大多数编程语言中,除法运算符是`/`,整数除法可能使用另一个运算符,如C++中的`/`和`%`分别代表浮点除法和整数除法。 4. **精度问题**:浮点除法可能会涉及到精度问题,尤其是在不同数据类型的混合...
2. **运算符**:Java中的除法运算符有 `/` 和 `%`,分别对应商和余数。根据功能需求,可能需要对这两个运算符进行不同的处理。 3. **异常处理**:Java的除法运算会抛出ArithmeticException异常,如除以零。程序需要...
以上所述,虽然SQL没有直接的除法运算符,但通过各种查询技巧和操作,我们可以有效地模拟并实现关系代数中的除法运算。在处理复杂的数据关系时,掌握这些方法能够帮助我们更好地理解和分析数据。
在C++中,`%`运算符用于计算除法的余数,而递归调用则确保了算法的正确执行。 在实际开发中,这种算法常用于优化其他计算,比如简化分数、检测素数等。由于其简洁的逻辑和高效的性能,短除法在编程竞赛和算法设计中...
在这样的情况下,我们不能直接依赖内置的算术运算符,而是需要设计特殊的算法来实现大数的除法操作。 大数处理的核心在于数组或链表的使用,因为这些数据结构可以存储任意长度的数字序列。在描述中提到的“将大数...
例如,加法运算符"+"用于将两个数值相加,减法运算符"-"用于做减法,乘法运算符"*"用于乘法,除法运算符"/"用于除法,以及取模运算符 "%"用于求余数。例如,`var result = 5 + 3;`将返回8。 2. **赋值运算符**:...