【问题标题】:Count ways to express a number as sum of consecutive numbers计数方法将数字表示为连续数字的总和
【发布时间】:2019-09-26 22:49:26
【问题描述】:

计数方式将数字表示为连续数字的总和。比如说 21 ,有 3 种方法可以得到它 [1,2,3,4,5,6] , [6,7,8] 和 [10,11] 。

当我在互联网上寻找一些解决方案时,我编写了我无法理解的 sn-p 代码。还是它背后的数学理论。虽然它给出了正确的答案。

long countConsecutive(long num){
  long sumOfFirstIntegers = 3;        
  long count = 0;       

  for(long i = 2 ; sumOfFirstIntegers<=num; ++i){                         
    if((i%2==0)?(num%i==i/2): (num%i==0)){                      
      ++count;               
    }             
    sumOfFirstIntegers+=i+1;                    
  }           
  return count;          
}

【问题讨论】:

  • 该代码甚至无法编译
  • 它可以编译,只需将 itr 替换为 i @XtremeBaumer。然而,这看起来像是一个数学问题,而不是 Java 问题。
  • @PaulLemarchand 好吧,只要需要更改任何内容以进行编译,它就不会编译,直到该内容被更改。如果简单的复制粘贴提供的代码无法编译,则可以说它无法编译。您永远无法确定它是否有意
  • @XtremeBaumer 我大部分时间都同意,尽管这很明显。
  • @PaulLemarchand 可能是一个成员变量,这将导致截然不同的结果。这就是为什么 OP 应该总是发布一个 MCVE

标签: java


【解决方案1】:

这个程序是用 Python 编写的 我应用的非常简单的公式

算术序列公式之和 当给定最后一项时 S = n⁄2 (a + L)

N=15
result=0
for start in range(1,N):
    cnt=1
    for end in range(start,N):
        sum1= cnt/2*(start+end)
        cnt=cnt+1
        if(sum1==N):
            result=result+1
            #print(start,end)
print(result)   

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
【解决方案2】:

独立于数学,这可能是让你头疼的那一行:

if((i%2==0)?(num%i==i/2): (num%i==0)) { 

可以这样重写:

bool condition;
if (i%2 == 0) {
  condition = num%i == i/2;
} else {
  condition = num%&i == 0;
}
if (condition) { ++count; }

所以ternary operator是用来选择布尔条件的,%就是modulo operator

关于这一切背后的数学,我委托给geeksforce

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 2014-04-05
    • 1970-01-01
    • 2015-10-07
    • 1970-01-01
    • 2019-06-27
    • 2019-05-05
    相关资源
    最近更新 更多