【白话经典算法系列之十四】腾讯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马周游,单步显示马所走过的路线及所走的步数,该路线不能继续下去时回溯,并显示回溯的步数。 立即下载

相关推荐

ADS1231驱动开发:24位高精度ADC嵌入式实现指南

24位Δ-Σ型ADC是高精度传感器信号采集的核心器件,其原理基于过采样与数字滤波实现远超奈奎斯特极限的分辨率。技术价值在于以低成本硬件达成微伏级信号分辨能力,显著提升称重、压力、力等桥式传感器系统的动态范围与温漂稳定性。典型应用场景涵盖电子秤、工业变送器及材料测试设备等对线性度、零点漂移和抗工频干扰(50/60Hz)有严苛要求的领域。本文围绕ADS1231这一面向惠斯通电桥优化的专用ADC,深入解析其串行同步时序驱动、PGA增益配置、参考电压匹配及FreeRTOS多任务安全集成等关键工程实践。

weixin_34268462的博客 624

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

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

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

YOLOv11 改进策略 | HWD:引入 Haar 小波变换,减少信息丢失

在卷积神经网络(CNN)中,下采样(Downsampling)是降低特征图分辨率、扩大感受野的关键操作,通常通过最大池化(MaxPool)或步长为 2 的卷积(Strided Convolution)实现。然而,这些方法在降低分辨率的同时,往往会丢失图像中的高频细节信息(如边缘、纹理)和精确的空间位置信息,这可能对后续特征提取和目标检测精度产生不利影响,尤其是对于小目标和需要精细定位的任务。

走向CTO的路上... 1788

归并排序

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

告别谷歌翻译失效!手把手教你用Immersive Translate插件实现双语网页阅读(附Chrome/Edge/Firefox保姆级配置)

本文详细介绍了如何使用Immersive Translate插件实现双语网页阅读,解决谷歌翻译失效的问题。通过Chrome、Edge和Firefox的保姆级配置指南,帮助用户轻松安装和使用这款支持双语对照、智能识别网页内容的翻译插件,提升外文资料阅读效率。

weixin_28683689的博客 485

Ethercat学习-从站源码生成

移植平台GD32F450,从站芯片AX58100

西澳峰的博客 9217

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万+

✨使用 vLLM + Docker 部署 Qwen3-Embedding-8B 并实现高效文本向量生成(附 `curl` 测试)

本文介绍了如何使用 vLLM 和 Docker 部署 Qwen3-Embedding-8B 嵌入模型服务,并通过标准 OpenAI 兼容接口进行调用和结果解析。如果你在部署中遇到任何问题,欢迎留言讨论!

用大模型重构生活:猫奴程序员的AI智能日常记录 6238

设有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

交通小白首投TRB就中Oral?我的完整时间线与避坑指南(附Editorial Manager实操截图)

本文详细解析了交通领域新手如何高效完成TRB国际会议投稿的全流程,从选题策略到投稿系统实操,再到评审过程解析和常见误区避坑指南。特别针对初次投稿者提供了实用建议,包括时间规划、选题考量、Editorial Manager系统操作技巧,以及如何应对评审意见。文章还分享了从录用到会议参与的关键步骤,帮助研究者提升投稿成功率。

weixin_27303545的博客 386

C# WinForm项目目录结构详解:从入门到精通(附常见问题解决方案)

本文详细解析了C# WinForm项目目录结构,从解决方案与项目基础结构到核心文件功能,再到关键目录解析,帮助开发者快速掌握WinForm项目组织方式。文章还提供了常见问题解决方案,如引用丢失、配置文件不生效等,是WinForm开发从入门到精通的实用指南。

dream的博客 647

用 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

S7-1500 PLC与多台S7-200SMART PLC进行PROFINET通信的快捷方法

S7-1500 PLC与多台S7-200SMART PLC进行PROFINET通信的快捷方法

Robot_PLC_HMI_Automation 5687

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

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

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

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

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

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

稻草人技术博客 623

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

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

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

e3internet的专栏 893

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

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

【转】白话算法经典系列之十四 问题描述:现有一数组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、付费专栏及课程。

余额充值