演算法實驗題1.2:連續整數和問題
阿新 • • 發佈:2019-01-29
問題描述:大部分的正整數可以表示為2個以上的連續整數之和。如6=1+2+3,9=5+4=2+3+4。
實驗任務:連續整數和問題要求計算給定的正整數可以表示為多少個2以上連續整數之和。
資料輸入:由檔案input.txt給出輸入資料。第1行有1個正整數。
結果輸出:將計算出的相應的連續整數分解數輸出到檔案output.txt。
輸入檔案示例 輸出檔案示例
input.txt output.txt
9 2
——題目來源《資料結構(C語言描述)(修訂版)》王曉東編著,演算法實驗1
解題思路:
•題目要求的是給定的正整數可以表示為多少個2 個以上連續整數之和。那麼這個連續整數個數無非是偶數和奇數。故只要找出其能表示為偶數和奇數個連續整數和的條件就可以了;•用變數i()表示給定正整數能表示連續整數之和的整數個數; •若i為奇數,根據連續整數和的計算,對於給定的正整數n,有n=(i-1)x,x為n分解後等號右邊第i/2個正整數,那麼只要滿足以下這個式子:i%2!=0&&n%i==0,那麼說明給定整數能表示成i個連續整數之和;
•若i為偶數,那麼對於給定的正整數n,有n=(i-1)x+(
#include<iostream> #include<fstream> using namespace std; int main() {ifstream infile("input.txt"); ofstream outfile("output.txt"); int i,t=0; i=2; long int n; infile>>n; while((i*i)<=(2*n)) {if((i%2==0)&&(n%i==i/2)) t=t+1; if((i%2!==0)&&(n%i==0))==0)) t=t+1; i++; } outfile<<t; }