最近時日,從dangdang買了本mara眾高人寫的《程式設計之美》,裡面有這麼一道題,其中並沒有給出問題的解答。一時興起,就在電腦前動了動手,特獻醜與此。btw,《程式設計之美》應該是每一位熱愛程式設計技術的it從業人員桌案邊必備的好書。當我還在沉浸於找出問題的解決方案時,mara的大俠找出了n個解,並且尋求最優解。他們把乙個看似複雜的問題可以很快地簡單化,找出數學模型,並程式設計實現。keep fighting!!!
[question]
我們知道:1+2=3;
4+5=9;
2+3+4=9;
等式左邊都是兩個以上連續的自然數相加,那麼是不是所有的整數都可以寫成這種形式呢?
寫乙個程式,對於乙個32位正整數,輸出它所有的連續自然數之和的算式。
[analysis]
可以發現任意自然數序列其實是公差為1的等差數列,那麼數列前n項和公式有a1*n +n*(n-1)/2 = sn,而這裡sn = 輸入的正整數input。通過分析a1只需在集合[1,input/2)中,把上式等效變形為n2+(2a1-1)n-2input = 0,n的取值為中學學得2a分之負b加減根號下b方減4ac,哈,如果n為乙個正整數,那麼符合條件輸出。如何判斷n為合法的正整數不是浮點數呢?看看我的solution吧。我演算法的時間複雜度是o(n)線形級別的,不知哪位大蝦的solution可以再快些。
[answer-programme]
#include "stdafx.h"
#include
#include
bool ispositiveint(float num)
void outputresult(int a1,float n,int input)
}return 0;
}
只考加法 程式設計之美2 21
我們知道 1 2 3 4 5 9 2 3 4 9 等式左邊都是兩個以上連續的自然數相加,那麼是不是所有的整數都可以寫成這種形式呢?寫乙個程式,對於乙個32位正整數,輸出它所有的連續自然數之和的算式。可以發現任意自然數序列其實是公差為1的等差數列,那麼數列前n項和公式有a1 n n n 1 2 sn,...
《程式設計之美》讀書筆記
程式設計之美 讀書筆記 一 中國象棋將帥問題 程式設計之美 讀書筆記 二 求二進位制數中1的個數 擴充套件問題 程式設計之美 讀書筆記 三 一摞烙餅的排序問題 程式設計之美 讀書筆記 四 買書折扣問題的貪心解法 程式設計之美 讀書筆記 五 飲料 問題 程式設計之美 讀書筆記 六 連連看遊戲設計 程式...
程式設計之美 只考加法的算術題
問題描述 給定乙個正整數 n,將n分解為幾個 2個以上 連續的自然數的和。是否所有的數都可以做到。例如 10 1 2 3 4。思路 以最簡單的方式開始思考 1 n為奇數,奇數可以分解為兩個連續的自然數的和。例如 9 4 5。2 當n為偶數,如果n可以被 3 整除,假設a n 3,那麼n還可以被分解為...