Cho một số nguyên n làm đầu vào. Mục đích là tìm số cách mà chúng ta có thể biểu diễn ‘num’ dưới dạng tổng của hai hoặc nhiều số tự nhiên liên tiếp. Ví dụ:nếu n là 3 thì nó có thể được biểu diễn dưới dạng tổng (1 + 2) nên tổng là 1 cách.
Ví dụ
Đầu vào
num=6
Đầu ra
Count of ways to express a number as sum of consecutive numbers are: 1
Giải thích
The ways in which we can express ‘num’ as sum of consecutive natural numbers: 1+2+3
Đầu vào
num=19
Đầu ra
Count of ways to express a number as sum of consecutive numbers are: 1
Giải thích
The ways in which we can express ‘num’ as sum of consecutive natural numbers: 9+10
Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau -
Trong cách tiếp cận này, chúng tôi sẽ biểu diễn số dưới dạng tổng của (a + a + 1 + a + 2… .. + a + i).
Mà trở thành (a) (L + 1) lần + 1 + 2 + 3 + 4… + i =a * (i + 1) + i * (i + 1) / 2. (tổng của i số tự nhiên) num =a * (i + 1) + i * (i + 1) /2.a=[num - (i) * (i + 1) / 2] / (i + 1)
Chúng tôi sẽ làm điều này cho i =1 đến i * (i + 1) / 2 nhỏ hơn num.
-
Lấy một số nguyên làm đầu vào.
-
Hàm sum_consosystem (int num) nhận một num và trả về số lượng các cách để biểu thị ‘num’ dưới dạng tổng của các số tự nhiên liên tiếp.
-
Lấy số lượng ban đầu là 0.
-
Lấy biến tạm thời res làm float.
-
Sử dụng vòng lặp for đi qua từ i =1 đến i * (i + 1) / 2
-
Tính giá trị [num - (i) * (i + 1) / 2] / (i + 1) và lưu trữ trong res.
-
Nếu res là số nguyên (res - (int) res là 0) thì số gia tăng.
-
Cuối cùng, chúng ta có đếm là những cách mà num có thể được biểu diễn dưới dạng tổng của các số tự nhiên liên tiếp.
-
Kết quả là số lượt trả lại.
Ví dụ
#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; }
Đầu ra
Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -
Count of ways to express a number as sum of consecutive numbers are: 1