算法實驗題1.2:連續整數和問題

問題描述:大部分的正整數可以表示爲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)xxn分解後等號右邊i/2個正整數,那麼只要滿足以下這個式子:i%2!=0&&n%i==0,那麼說明給定整數能表示成i個連續整數之和;
i爲偶數那麼對於給定的正整數n,有n=(i-1)x+(x+i/2)=ix+i/2xn分解後等號右邊[i/2]個正整數,只要滿足以下這個式子:i%2==0&&n%i==i/2n爲給定的整數),那麼說明給定整數能表示成i個連續整數之和;
中間設計數變量t,當滿足條件時t就自動加1,最後輸出t。
#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;
    }



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章