首页 > 编程语言 >面试题 - C# 交错序列求和

面试题 - C# 交错序列求和

时间:2024-05-29 17:00:29浏览次数:28  
标签:面试题 奇数 C# 代码 奇偶性 偶数 求和 int 表达式

试题

求以下表达式的值,写出您想到的一种或几种实现方法: 1-2+3-4+.....+m?最好用C#代码实现。

分析

这个表达式是一个交错序列的和,其中正数和负数交替出现。通常我们可以使用循环来实现这个计算,但面试官更青睐效率高的方式实现。

直观循环法

这种方法简单易懂,适合初学者理解和实现,但它并未挖掘序列本身的规律,因此在处理大规模数据时效率可能不是最优。

查看代码
public static int CalculateAlternatingSum(int m)
{
	int sum = 0;
	for (int i = 1; i <= m; i++)
	{
		if (i % 2 == 1) // 如果是奇数位置(正数)
			sum += i;
		else // 如果是偶数位置(负数)
			sum -= i;
	}
	return sum;
}

优化一

查看代码
public static int CalculateAlternatingSum(int m)
{
	// 计算偶数对的数量,因为每对的和为-1
	int pairCount = m / 2;
	// 如果m是奇数,需要加上最后一个数(正数)
	int lastNumberToAdd = m % 2 == 1 ? m : 0;
	// 计算总和
	int sum = -1 * pairCount + lastNumberToAdd;
	return sum;
}

优化二

查看代码
public static int CalculateAlternatingSum(int m) => ((m & 1) * 2 - 1) * (m + 1) / 2;

这是一个使用lambda表达式定义的简单函数,其输入参数为一个整数m,返回一个基于m计算得到的整数值。让我们一步步分析这个函数的逻辑:

  1. (m & 1):这部分使用了位与操作符&,作用是取出m的最低位(即二进制表示下的最右边一位)。如果m是奇数,这一位为1;如果是偶数,则为0。因此,这步的结果实质上是在判断m的奇偶性。
  2. ((m & 1)*2-1):基于上一步的结果,如果m是奇数,(m & 1)得到1,经过2-1后结果仍为1;如果m是偶数,(m & 1)得到0,经过2-1后结果为-1。所以,这部分代码的作用是根据m的奇偶性返回1或-1,可以看作是一个符号决定器,奇数时为正,偶数时为负。
  3. *(m + 1):将上一步得到的结果(1或-1)与m + 1相乘。这会根据m的奇偶性和大小进一步调整结果的值。注意这里的加1操作是为了确保当m为0时,避免除法运算出现除以0的情况。
  4. / 2:最后,将上述结果除以2。结合前面的步骤,整个表达式实际上在根据m的奇偶性执行不同的计算路径,并且利用了数学上的技巧来简化计算过程。
    综上所述,这个函数的逻辑可以概述为:
    当m为偶数时,计算结果为-(m+1)/2
    当m为奇数时,计算结果为(m+1)/2

标签:面试题,奇数,C#,代码,奇偶性,偶数,求和,int,表达式
From: https://www.cnblogs.com/ShenhaoCore/p/18220623

相关文章

  • BUUCTF pwn actf_2019_babystack
    先checksec看保护: ida看主程序:主要部分图片已经说了,由于最多只能往s中写入224字节,padding占据208字节,fakeebp是8字节,ret是8字节,便填满了,由于此处没有backdoor,于是想到栈迁移,在s上部署system("/bin/sh"),在leave_ret到s栈的地址,实行system("/bin/sh")思路分析: 1.先......
  • MVVM模式的优点以及与MVC模式的区别?
    1.MVVM模式的优点:1、低耦合:视图(View)可以独⽴于Model变化和修改,⼀个ViewModel可以绑定到不同的"View"上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。2、可重⽤性:你可以把⼀些视图逻辑放在⼀个ViewModel⾥⾯,让很多......
  • vite配置自动引入全局scss变量文件
    全局自动引入scss变量文件当定义了全局的scss变量文件并且而其他很多页面都需要使用的时候,都需要显式的使用@import或者@use引用一遍全局scss文件,很是麻烦。使用以下配置这样能有效避免造成大量重复工作,可以在任何scss文件中任意使用全局变量。定义全局scss变量文件配置vi......
  • windows10安装centos7双系统详细教程
    Centos7系统使用了很长的时间,但是要不是在虚拟机环境下使用,要不就直接安装centos7系统,没有尝试过安装双系统使用,最近虚拟机运行起来电脑弄的很卡,索性就直接安装双系统使用,工作娱乐都能使用。下面开始介绍安装双系统的详细流程。1.安装环境硬件设备:戴尔7460笔记本,8G以上的U盘一个......
  • 了解Stratix® V 5SGXA5 FPGA系列5SGXEA5H2F35I3G、5SGXEA5H2F35C3G、5SGXEA5H1F35C2G
    摘要StratixVFPGA具有1.6Tbps串行交换能力,采用各种创新技术和前沿28-nm工艺,突破带宽瓶颈,降低了宽带应用的成本和功耗。概述StratixVFPGA系列采用TSMC28nm高性能(HP)工艺进行制造,提供110万逻辑单元(LE)、53-Mbits嵌入式存储器、3,680个18x18乘法器,以及工作在业界最高速率......
  • 使用Dockerfile部署go项目
    主旨就是先拉代码,再删旧容器和镜像,再起Dockerfile的容器并执行出go的二进制文件,再运行Dockerfile文件如下FROMgolang:alpine#为我们的镜像设置必要的环境变量ENVGO111MODULE=on\GOPROXY=https://goproxy.cn,direct\CGO_ENABLED=0\GOOS=linux\GO......
  • GEE C26 GEEDiT—Digitizing from Satellite Imagery从卫星影像数字化
     一、TheGoogleEarthEngineDigitisationTool(GEEDiT)  GEE数字化工具谷歌地球引擎数字化工具(GEEDiT)允许用户定义地球上任何地方的一个点,并通过一个简单的图形用户界面(GUI)对每个卫星的数据进行过滤,以获得用户定义的时间框架、最大可接受的云量,以及预定义或自定义图......
  • CS配合MSF互传权限 以及使用mimikatz抓取明文密码
    cobaltstrike与metasploit互传权限1.cobalt传递权限给msf启动server端./teamserver[监听地址][密码]使用客户端连接:生成一个监听器在5555端口服务端上监听生成后门可以选择以上几种选择interact模块进行利用先生成一个外部http监听器这里填写msf主机所监......
  • 实现Avalonia平台下低配版的Dock控件:实现TabControl的可关闭
    在弄一个项目,在WPF下用Dock控件,在Avalonia平台下实现也有一个Dock控件,但用起来有点复杂。Install-PackageDock.AvaloniaInstall-PackageDock.Model.Mvvm感兴趣的可以访问网站了解:https://github.com/wieslawsoltes/Dock其实本身用的比较简单,所以就想着,用TabControl来改一下......
  • oracle的排序函数以及mysql使用变量实现排序
    oracle的排序函数rank()函数:跳跃排序,如果两个第一,则后边是第3dense_rank()函数:连续排序,,再如两个第一,则后边是第2row_number()函数:连续排序,没有并列的情况createtableccx_test( coursevarchar(10), scoreint);insertintoccx_testvalues(1,70);insertintoccx_......