【白话经典算法系列之十四】腾讯2012年实习生笔试加分题

06-数组 -c语言初学系列 ps:此教程配套ppt下载地址如下,如果需要可以下一下,不过其实也无所谓,这篇文章就是全部文本。输入A,B,C,D,E五个班学生的C语言成绩,求平均分(设每班30人)要定义30个变量,很麻烦,如果学生数量有1000个呢?程序L6_5.C :输入两个数,输出其中最大数。请输入30个同学C语言的成绩,求平均分。练习:求一个3×3矩阵对角线元素之和。6.1 一维数组的定义和引用。6.3 多维数组的定义和使用。练习:打印出以下的杨辉三角形。6.2 一维数组的初始化。6.4 数组作为函数参数。 阅读详情

地址:http://blog.youkuaiyun.com/morewindows/article/details/8742666转载请标明出处,谢谢。

欢迎关注微博:http://weibo.com/MoreWindows      

 

    之前参加2012年腾讯实习生笔试时,在考场中遇到一道加分题,当时灵光一闪,直接挥笔就解决这道题目。今天看到学校论坛上有师弟师妹们在询问这题的解法,就写篇博客来分享我的解法吧,也欢迎大家讨论其它解法。

    首先来看题目描述:

三 、加分题

28)给定一数组a[N],我们希望构造数组b [N],其中b[j]=a[0]*a[1]…a[N-1] / a[j],在构造过程中,不允许使用除法:

要求O(1)空间复杂度和O(n)的时间复杂度;

除遍历计数器与a[N] b[N]外,不可使用新的变量(包括栈临时变量、堆空间和全局静态变量等);

实现程序(主流编程语言任选)实现并简单描述。

    这道题目最为独特的要求就是除去遍历计算器外不能申请其它新的变量。怎么解决了?首先不考虑这个条件,代码如下:

// 腾讯2012年实习生笔试加分题
//http://blog.youkuaiyun.com/morewindows/article/details/8742666
//By MoreWindows( http://blog.youkuaiyun.com/MoreWindows )
#include <stdio.h>
void PrintfArray(int a[], int n)  
{  
	for (int i = 0; i < n; i++)  
		   printf("%5d ", a[i]);  
	putchar('\n');  
} 
int main()
{
	printf("    腾讯2012年实习生笔试加分题  \n");
	printf(" - http://blog.youkuaiyun.com/morewindows/article/details/8742666 -\n");
	printf(" -- By MoreWindows( http://blog.youkuaiyun.com/MoreWindows ) --\n\n"); 
	
	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];

由此可以看出从b[4]到b[0]均已经得到正确计算。

运行结果如下所示(图片无法打开?请访问http://blog.youkuaiyun.com/morewindows/article/details/8742666):

然后考虑到题目要求不能申请额外的临时变量,因此int temp肯定是不能有的,那用什么来代替这个temp了?很简单,用b[0]来代替即可。于是上面的第二个for循环语句变为:

	for (i = MAXN - 1; i >= 1; i--)
	{
		b[i] *= b[0];
		b[0] *= a[i];
	}

试验下,运行结果如下所示(图片无法打开?请访问http://blog.youkuaiyun.com/morewindows/article/details/8742666):

呵呵,b[0]一代替,轻轻松松加分到手^_^。有其它方法欢迎交流(http://weibo.com/MoreWindows  Or morewindows@126.com),谢谢。

 

地址:http://blog.youkuaiyun.com/morewindows/article/details/8742666转载请标明出处,谢谢。

欢迎关注微博:http://weibo.com/MoreWindows      

算法设计技巧与分析--马周游 8X8马周游,单步显示马所走过的路线及所走的步数,该路线不能继续下去时回溯,并显示回溯的步数。 立即下载

相关推荐

如何利用三阈值游程理论识别干旱事件_python

如果当前时间点与上一个干旱事件的结束位置相隔不超过一个月(`index - current_event['end_index']

weixin_44259522的博客 1945

数据结构与算法之—数组(一)

使用csdn已经2年多了,一直想在上面写点东西,确一直没有实施,在学校的时候,在业余的时候自己总会写点小程序,小算法什么的,由于工作后时间不充裕,有时间也想休息,出了工作的时候写点代码,回家基本不太想动,最近工作不是太忙,想自己写的感兴趣的东西。 由于自己在毕业之前自己平时写过较多的数据结构的东西,后来发现在找工作的时候还很有用,虽然在工作上,因为要提高效率的原因,很多的数据结构和算法都被一些封

实践是检验真理的唯一标准 662

【技能---ubuntu20.04更换国内镜像源】

安装好ubuntu20.04后,在下载软件等安装包的时候,速度特别的慢,为此就想着更换一下镜像源,以此来增加下载的速度!!!下面是换源的具体流程!!!提示:以下是本篇文章正文内容,下面案例可供参考以上到这里就更换完软件源了,如有不足之处,请大家斧正!!!

fyc300的博客 1万+

归并排序

package com.study.sort; import java.util.Arrays; /** * 参考:https://www.cnblogs.com/chengxiao/p/6194356.html *8 4 5 7 1 3 6 2 *1、将原始数组分割为最小数组序列,先将子序列进行排序,然后向上归并; * * mergeItemStart==>:startIndex:0 midIndex:0 endIndex:1 handLen:2 * array:

accordall的专栏 221

从标准到实战:详解IEC 61000-4-2下的ESD电路防护设计

本文深入解析IEC 61000-4-2标准下的ESD电路防护设计,从静电防护的基础原理到实战应用。详细介绍了接触放电与空气放电的区别、防护器件选型要点(如TVS管和压敏电阻)以及PCB布局的黄金法则,帮助工程师有效提升电子产品的抗静电能力,确保设备在严苛环境下的稳定运行。

weixin_33704234的博客 512

Spatio-Temporal Graph Convolutional Networks: A Deep Learning Framework for Traffic Forecasting 论文笔记

Spatio-Temporal Graph Convolutional Networks: A Deep Learning Framework for Traffic Forecasting 论文笔记-----GCN在交通领域的应用(二) 一、论文翻译: 1、摘要: 及时准确地交通预测对于城市交通控制和指导具有至关重要的意义。由于交通流量的非线性和复杂性,传统的方法不能满足中长期预测任务的需求,并且往往会忽略时空数据的时间和空间依赖特性。在这篇论文中,为了处理在交通领域的时间序列预测问题...

cy_believ的博客 1916

c语言:将一个二维数组行和列的元素互换,存到另一个二维数组中。

将一个二维数组行和列的元素互换,存到另一个二维数组中。解:程序:#includeint main(){ int i, j, a[2][3] = { {1,2,3},{4,5,6} },b[3][2]; printf("array a:\n"); for (i = 0; i { for (j = 0; j { printf("%5d", a[i][j]); b[j][i] = a[i

岩枭的博客 6万+

ABAQUS应用15——Abaqus软件中边界条件与力学中自由度的关系

核心关系:Abaqus通过约束自由度实现边界条件,自由度类型由单元决定。正确设置步骤:确定模型类型(实体/梁/壳)。识别节点的自由度(平动或转动)。根据实际约束施加对应的自由度限制。验证:通过检查变形模式、反力分布等确认边界条件合理性。正确理解自由度与边界条件的关系,是确保有限元模型准确模拟实际物理行为的关键。

George的博客 1544

设有a[n],b[n]。求a[0]*b[0]+a[1]*b[1]+...+a[n-1]*b[n-1] 。其中n,及数组a和b的元素值由键盘输入。

#include #define N 100 #define M 100 int main() { int n,i,j,k; int a[N], b[M]; printf("Input n\n"); scanf_s("%d", &n); printf("Input array a\n"); for (i = 0; i < n; i++) { scanf_s("%d", &a[i]); } print

m0_68971122的博客 1487

AUTOSAR从入门到精通-【应用篇】基于AUTOSAR架构的混合动力电池 ECU 软件开发

由于严峻的环境污染和能源短缺问题,各国都在致力于发展新能源车,以达到节能排放的目的。在此背景下,12V启停系统由于成本较低廉、匹配方便,得到广泛应用。但是12V系统作为启停系统后存在许多问题,比如节能和减排效果有限,并且轻度混合动力系统的功率需求通常在10~15KW,在此电压条件下运行时,电池的电流会达到1000A,因此该方案行不通。高压混合动力系统(>110V)的节油效果好,但是成本很高,并且需要大功率的电机。48V混合动力系统比高压混合动力系统成本。

getusushu的博客 1488

Open3D 实现CSF布料模拟算法【2025最新版】

CSF布料模拟算法在open3d模块下的实现,博客长期更新,本文最近更新时间为:2025年1月16日。。

点云侠的博客 5746

用 clojure实现【白话经典算法系列之十四】腾讯2012年实习生笔试加分题

昨天见 【白话经典算法系列之十四】腾讯2012年实习生笔试加分题, 作为一个clojure爱好者,实现了一个clojure版本的。 题目: 给定一数组a[N],我们希望构造数组b [N],其中b[j]=a[0]*a[1]…a[N-1] / a[j],在构造过程中,不允许使用除法: 要求O(1)空间复杂度和O(n)的时间复杂度; 除遍历计数器与a[N] b[N]外,不可使用新

goodluckforlove的专栏 1167

结构优化软件:OptiStruct_(11).拓扑优化

在OptiStruct中,设计空间可以通过定义设计区域来实现。设计区域是结构中可以进行材料变化的部分。几何区域:通过几何选择工具选择特定的区域。网格区域:通过网格选择工具选择特定的单元。假设我们有一个简单的梁结构模型,网格文件为beam.fem。我们希望在梁的中部进行拓扑优化,以减轻重量并保持刚度。

kkchenjj的博客 1367

【白话经典算法系列之十四】腾讯2012年实习生笔试加分题 .

地址:http://blog.youkuaiyun.com/morewindows/article/details/8742666转载请标明出处,谢谢。 欢迎关注微博:http://weibo.com/MoreWindows             之前参加2012年腾讯实习生笔试时,在考场中遇到一道加分题,当时灵光一闪,直接挥笔就解决这道题目。今天看到学校论坛上有师弟师妹们在询问这题的解法,就写篇博客

希望记录下自己的一点一滴,慢慢成长。。 988

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

白话经典算法系列之十四 腾讯2012年笔试题

之前参加2012年腾讯实习生笔试时,在考场中遇到一道加分题,当时灵光一闪,直接挥笔就解决这道题目。今天看到学校论坛上有师弟师妹们在询问这题的解法,就写篇博客来分享我的解法吧,也欢迎大家讨论其它解法。首先来看题目描述: 给定一数组a[N],我们希望构造数组b [N],其中b[j]=a[0]*a[1]…a[N-1] / a[j],在构造过程中,不允许使用除法: 要求O(1)空间复杂度和O(n)的时间

稻草人技术博客 623

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

MoreWindows大神的腾讯2012年实习生笔试加分题 之扩展篇

闲逛优快云看到MoreWindows大神博客的《【白话经典算法系列之十四】腾讯2012年实习生笔试加分题》立马截图题目部分(首先自己思考的习惯) MoreWindows大神博客地址:http://blog.youkuaiyun.com/morewindows/article/details/8742666 阅读题目我们可以得出几点: 1、构造过程中不能使用除法(*重要) 2、要求O(

e3internet的专栏 893

精妙算法收集---一道有趣的腾讯笔试加分题

【转】白话算法经典系列之十四 问题描述:现有一数组a[N-1],求另外一数组b[N-1] 问题约束:1.不能用除法 2.不能用除了遍历a,b两数组需要的变量之外的变量 3.时间复杂度为O(N),空间复杂度为O(1) 解法: // 腾讯2012年实习生笔试加分题 //http://blog.youkuaiyun.com/morewindows/article/details/8742666 ...

weixin_34066347的博客 126

MoreWindows 微软认证专家博客目录(白话算法,C++ STL,windows编程)

为了方便大家查找和学习,现将本人博客中所有博客文章列出目录。 (http://blog.youkuaiyun.com/morewindows) 一.      白话经典算法 目前有17篇,分为七大排序和经典面试题讲解两大类 1.      《白话经典算法系列之一 冒泡排序的三种实现》 2.      《白话经典算法系列之二 直接插入排序的三种实现》 3.      《白话经典算法系列之

在思索中前行! 1485
上一篇: strtok源码剖析 位操作与空间压缩
下一篇: VC++得到系统特殊文件夹路径
MoreWindows
MoreWindows 《白话经典算法》、《秒杀多线程》作者 《白话经典算法》、《秒杀多线程》作者 领域专家: 操作系统技术领域 领域专家: 操作系统技术领域
博客等级 码龄15年 2万+粉丝 157原创
评论 116
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值