用 C++ 统计将一个数表示为连续数之和的方法数
给定一个整数 n 作为输入。目标是找到将 'num' 表示为两个或多个连续自然数之和的方法数。例如,如果 n 为 3,它可以表示为和 (1+2),所以共有 1 种方法。
例如
输入
num=6
输出
Count of ways to express a number as sum of consecutive numbers are: 1
解释
The ways in which we can express ‘num’ as sum of consecutive natural numbers: 1+2+3
输入
num=19
输出
Count of ways to express a number as sum of consecutive numbers are: 1
解释
The ways in which we can express ‘num’ as sum of consecutive natural numbers: 9+10
以下程序中使用的思路如下 −
在这种方法中,我们将数字表示为 (a + a+1 + a+2…..+ a+i) 的和。
它变成 (a)(L+1) 次 + 1+2+3+4…+i = a*(i+1) + i*(i+1)/2。(i 个自然数的和)num=a*(i+1) + i*(i+1)/2。a= [ num − (i)*(i+1)/2 ] / (i+1)
我们将从 i=1 到 i*(i+1)/2 小于 num 执行此操作。
将一个整数 num 作为输入。
函数 sum_consecutive(int num) 获取一个 num 并返回将 'num' 表示为连续自然数之和的方法数。
将初始计数设置为 0。
将临时变量 res 作为浮点数。
使用 for 循环从 i=1 遍历到 i*(i+1)/2 < num。
计算 [ num − (i)*(i+1)/2 ] / (i+1) 的值并将其存储在 res 中。
如果 res 是整数(res − (int)res 为 0),则递增计数。
最后,我们将计数作为将 num 表示为连续自然数之和的方法数。
返回计数作为结果。
示例
#include <bits/stdc++.h>
using namespace std;
int sum_consecutive(int num){
int count = 0;
int temp = num * 2;
float res;
for (int i = 1; i * (i + 1) < temp; i++){
int store = i + 1;
res = (1.0 * num−(i * (i + 1)) / 2) / store;
float check = res − (int)res;
if(check == 0.0){
count++;
}
}
return count;
}
int main(){
int num = 20;
cout<<"Count of ways to express a number as sum of consecutive numbers are: "<<sum_consecutive(num) << endl;
return 0;
}输出
如果我们运行上述代码,它将生成以下输出:
Count of ways to express a number as sum of consecutive numbers are: 1
广告
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP