目录
说明
方法
示例
输出
结论
首页 后端开发 C++ 用加法或减法每一步得到N的最小步骤数

用加法或减法每一步得到N的最小步骤数

Sep 16, 2023 pm 01:13 PM
加法 减法 步骤数

从上面的问题陈述中,我们的任务是得到最少的步骤,在每个步骤中使用加法或减法可以得到给定的数字 N。我们可以理解,我们需要打印可以执行的最小步骤数以及对任何给定整数 N 的步骤顺序,通过步骤号的加减来达到从 0 开始的数字。

在这个问题集中,我们可以在每一步的当前位置上添加或减去等于步数的数字。例如,我们可以在第 1 步添加 1 或 -1。进一步,我们可以在第 2 步添加 2 或 -2,依此类推。我们可以根据情况在每一步添加或减去数字。

这个问题的主要挑战是我们需要从 0 开始执行最少的步骤来达到 N。让我们通过一个例子更好地理解这个问题。

下面给出的示例将向您说明通过执行上述操作,我们从 0 开始的 2 个步骤可以得到的每个数字。

用加法或减法每一步得到N的最小步骤数

例如,假设我们有 N=1

输出

Minimum no of steps: 1
Sequence of steps: 1
登录后复制

说明

我们可以通过两种方式达到 1 -

  • 只需在第 1 步加 1 即可从 0 移动到 1,这需要 1 步。

  • 在步骤 1 中减 1 以从 0 移动到 -1,然后在步骤 2 中加 2 以从 -1 移动到 1,这需要 2 个步骤。

由于问题表明我们需要最少的步数才能达到任意数字 N,因此该输入的所需输出将为 1。

对于,N=3

输出

Minimum no of steps: 2
Sequence of steps: 1 2
登录后复制

说明

我们在步骤 1 中添加 1 以从 0 移动到 1,然后在步骤 2 中添加 2 以从 1 移动到 3。

方法

解决问题的最好方法是首先弄清楚N是正数还是负数。我们必须分别在适当的步数上加上或减去才能解决问题。

  • 如果 N 是正数,则继续添加步数,直到总和大于或等于 N。

  • 同样,如果N是负数,则继续减去步数,直到总和大于或等于N。

  • 如果在上述情况下总和等于 N,则返回步骤数和步骤顺序。主要问题是超过N时的情况处理。

一旦总和超过N,检查(sum-N)是偶数还是奇数。

  • 如果 (sum-N) 是偶数,那么我们必须以 (sum-N)/2 步长执行减法才能达到 N。

    让我们通过一个合适的例子更好地理解这个案例。

    对于,N=8

    1+2+3+4=10,超过了8。

    因为 10-8=2 这是偶数。所以我们将以 2/2 步长减去,即

    第 1 步。因此,步骤的顺序将为 -1 2 3 4 和最小值

    到达 N 的步数将为 4

  • 如果(sum-N)是奇数,首先判断上一步总和超过N的数是偶数还是奇数。

    如果上一步是奇数,则通过添加下一个步骤编号来执行一个步骤,这将使我们的 (sum-N) 成为偶数,然后执行上述步骤以获得所需的结果。

    例如,N=9

    1+2+3+4=10,超过了 9。

    因为10-9=1,这是一个奇数。下一步是 5,它是一个奇数,因此我们只需执行一步,将 5 加到总和上,得到 15,使得 (sum-N)=6。在步骤 3 中执行减法将得到序列 1 2 -3 4 5,这是所需的输出。

    假设上一步是偶数,在这种情况下,我们需要执行两步,将第 i 步相加并减去第 (i+1) 步,得到 (sum- N) 作为偶数以获得所需的步骤序列。

    对于 N=5

    1+2+3=6,超过5。

    由于 (sum-N) =1,所以当 su 超过数字 N 时,我们将考虑最后一步。由于它是偶数,我们将执行两个步骤,即第 4 步和第 5 步。我们的任务是使 (sum-N) 即使如此,通过在第 4 步添加并在第 5 步减去,我们可以使 (sum-N) 即使从总和中减去 1。由于 (sum-N) 等于 0,因此我们得到 N。因此,序列为 1 2 3 4 -5。

示例

下面是该方法的 C++ 代码 -

#include <iostream>
#include <bits/stdc++.h>
using namespace std;
void minimumStep(int n){
   vector <int> steps; // for storing the sequence
   int totalSum=0; 
   int temp=0;
   if(n>=0){   // if n is positive then temp will store positive
      temp=1;
   } else {
      temp=-1;  // n is negative then temp will store negative
   }
   n=abs(n);
   int step=0;
   for(step=1;totalSum<n;step++){  // for storing the steps till sum is not greater than n
      steps.push_back(temp*step);
   
      totalSum=totalSum+step;
   }
   if(totalSum>temp*n) {  //when sum greater than n 
      if(step%2==0) {   //when step is even 
         totalSum=totalSum-n; 
         if((totalSum)%2!=0) { // when totalSum-n is odd
            steps.push_back(temp*step);  //store the addition of next step 
            steps.push_back((temp*-1)*(step+1));  // store the subtraction of next step 
            totalSum--;  //make totalSum even
         }
         int check=(totalSum)/2;
         check--;
         steps[check]=steps[check]*-1; 
		} else {        //when step is odd
         totalSum=totalSum-n;
         if((totalSum)%2!=0)  {  // when totalSum-n is odd 
            steps.push_back(temp*step);   //store the next addition value 
            totalSum+=step; 
            step++;
         }
         int check=(totalSum)/2;
         check--;
         steps[check]=steps[check]*-1;
   
      }
   }
   //print the minimum number of steps taken 
   cout<<"The minimum number of steps : "<<steps.size()<<endl;
   //print the steps is stored in vector
      cout<<"Sequence of steps : ";
   for(int i=0;i<steps.size();i++){
      cout<<steps[i]<<" ";
   }
   
}
int main(){
   int m=17;
   minimumStep(m);
   
   return 0;
}
登录后复制

输出

The minimum number of steps : 6
Sequence of steps : 1 -2 3 4 5 6
登录后复制

时间复杂度:O(sqrt(N))

空间复杂度:O(sqrt(N))

结论

在本文中,我们试图解释通过在每一步中添加或减去并打印序列来找出达到 N 的最少步骤的方法。我希望这篇文章可以帮助您更好地学习这个概念。

以上是用加法或减法每一步得到N的最小步骤数的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Python加法代码怎么写_Python加法代码写法教程 Python加法代码怎么写_Python加法代码写法教程 Apr 02, 2024 pm 06:16 PM

1、首先打开在线python编辑页面。2、然后在程序区输入程序代码。3、接着点击左上角的】运行【,输入第一个加数,按下回车,输入第二个加数。4、最后按下回车,得出两个加数的和。这就是简单的python加法代码。

不使用乘法、除法和取模运算符来进行两个整数的除法 不使用乘法、除法和取模运算符来进行两个整数的除法 Sep 21, 2023 pm 12:41 PM

在这个问题中,我们只需要将两个整数相除,而不需要使用乘法、除法和取模运算符。尽管我们可以使用加法、乘法或位操作。问题陈述指出我们将得到两个整数x和y。在不使用乘法、除法或取模运算符的情况下,我们需要确定x除以y后的商。示例输入:x=15,y=5输出:3输入:x=10,y=4输出:2输入:x=-20,y=3输出:-6方法方法1(使用简单的数学)在这种方法中,我们将使用一个简单的数学算法。下面是我们要遵循的步骤的分步说明-我们将从被除数(即x)中不断减去除数(即y),直到x大于或等于y。当y大于x时

Oracle数据库运算技巧:减法操作详解 Oracle数据库运算技巧:减法操作详解 Mar 02, 2024 pm 06:15 PM

Oracle数据库作为一种功能强大的关系型数据库管理系统,提供了丰富的运算操作来满足用户的需求。在日常的数据库操作中,减法操作是一个常见且重要的运算,它能够帮助我们实现数据的减法运算,从而得到我们所需的结果。本文将详细讨论Oracle数据库中减法操作的相关技巧,并给出具体的代码示例,帮助读者更好地理解和运用这一功能。1.减法操作的基本概念在Oracle数据

Excel怎么做减法 Excel怎么做减法 Mar 20, 2024 pm 02:46 PM

Excel是我们日常办公中必不可少的一个办公软件,那么对于一些初次学习Excel的人来说总会遇到一些小问题,就比如Excel怎么做减法这一问题,今天我就来跟小伙伴们分享这一操作步骤,具体的操作步骤就在下方,小伙伴们快来认真的看一看吧!1.首先,打开Excel数据表,Excel想要做减法是通过公式来实现的,而公式一般都是由等号引导的,故在需要做减法的单元格中,先输入=,(如下图红色圈出部分所示)。2.然后,点击被减数所在的单元格,就会自动在公式中补充上该单元格的名字,(如下图红色圈出部分所示)。3

探究Python运算符的含义和应用:加、减、乘、除 探究Python运算符的含义和应用:加、减、乘、除 Jan 20, 2024 am 09:21 AM

深入理解Python运算符:加法、减法、乘法、除法及其含义,需要具体代码示例在Python编程语言中,运算符是进行各种数学操作的重要工具之一。其中,加法、减法、乘法和除法是最常见的运算符,本文将深入探讨这些运算符的含义及其在Python中的使用方法。加法运算符(+)加法运算符用于将两个数字相加,也可以用于连接两个字符串。x=5y=3result

PPT如何制作减法设计美化图表 PPT如何制作减法设计美化图表 Mar 20, 2024 pm 02:00 PM

1.图表的基本美化操作空间小,将干扰的展示元素去掉。干扰数据的元素有背景、网格线、图例,可以将其删除美化以及阴影进行柔化。2.进入【PPT】,【打开】图表,点击【图表】,选择【+】,将其取消【勾选】,具体如图示。3.【右键】设置数据系列格式,点击【填充】,勾选【无填充】。点击【数据列】,点击【阴影】去除阴影,选择【外框】,将【文字】颜色白色。4.点击【刻度】,选择【刻度线】,调整【主题类型】无,【颜色】白色,具体如图示。5.将需要删除的地方删除,使表格变得清爽,设计时不要一味的添加东西,适当的做

使用位运算进行加法和乘法的C程序 使用位运算进行加法和乘法的C程序 Sep 16, 2023 pm 07:49 PM

按位运算符对位进行运算(即对操作数的二进制值进行运算)运算符描述&按位AND|按位或^按位异或<<左移>>右移-补码按位与aba&b000010100111按位或aba|b000011101111按位异或aba^b000011101110示例以下是借助按位运算符进行加法和乘法2的C程序- 现场演示#include<stdio.h>main(){  inta;  printf

使用pthread在C/C++中实现矩阵的加法和减法 使用pthread在C/C++中实现矩阵的加法和减法 Aug 28, 2023 am 09:05 AM

这里我们将看到如何使用多线程环境执行矩阵加法和减法。pthread用于在C或C++中同时执行多个线程。有两个矩阵A和B。每个矩阵的阶数为(mxn)。每个线程将获取每一行,并执行加法或减法。因此,对于m行,有m个不同的线程。示例#include<iostream>#include<pthread.h>#include<cstdlib>#include<cstdint>#defineCORE3#defineMAX3usingnamespacestd;i

See all articles