幾個連續的自然數相加等於某個值

2021-06-13 03:17:12 字數 1175 閱讀 4617

今天在上班的路上,突然想起以前看到的乙個題目,題目就是隨便輸入乙個數,讓你找出幾個連續的正整數相加等於它。(原題我忘記了,大概就是這個意思),網上有這個的演算法,以前仔細看了一遍,但是現在突然又忘記了(記性差)。

好了,廢話不說了,直入正題吧。既然是連續的幾個自然數,那麼,這幾個自然數肯定是有關係,比如,設一共有n個連續的自然數相加等於s,中間的乙個為m。

第一種情況,當n為奇數的時候,這種情況是最好理解的,n左邊有(n-1)/2個數,n右邊也有這麼多個數值,而且肯定是左邊和右邊的數值相加肯定等於m的整數倍。結論也出來了,當n等於奇數的時候,而且s能被n整除,那麼,肯定是存在連續的n個自然數相加等於s的,連續的幾個自然數為m-(n-1)/2,m-(n-1)/2+1.....m-1,m,m+1...m+(n-1)/2-1,m+(n-1)/2

第二種情況,當n為偶數的時候,上面的奇數就不適用了。先來看看例子。我們假設s%n=x;這句話的意思是s除以n餘數為x。這個時候,m不是代表中間乙個數字,而是代表中間偏左的乙個數字。那麼就會出現這樣一種情況,m左邊的數字比右邊的數字少乙個。也即是說,以m為中心,m前面有(n-2)/2個數。m後面有(n-2)/2+1個數。最後乙個數將比中間乙個數大(n-2)/2+1;假設s為s-(m+ (n-2)/2+1)。而且(n-2)/2 + 1 = s % n那麼根據第一種奇數條件,s-(m+(n-2)/2 + 1)將會有連續的n-1個數相加等於它,而且中間乙個數為m。也即是,只要滿足 餘數等於最後乙個數減去中間那個數,即可。即是說,只要n/2=s%n即可。

描述可能不是很清楚。我粗虐的寫了一點**來驗證我的想法,直接上**。

//nvalue代表s(ncount個數字相加的總和),ncount是n,代表你想要幾個連續的數字相加等於s。

int countsum(int nvalue, int ncount)

if (ncount == n && n % 2 == 0 && nyuret == nyu )

if (n++ > (nvalue + 1) / 2)

return 0;

nyu = n / 2;

} return 0;

} 注意,3以上的奇數肯定能找到兩個連續的數相加等於它。故,ncount最好不要找兩個。

以前好幾次都想寫文章,但是每次寫到一半都被其他的事情給耽擱了,事後也就沒有再繼續寫下去,這篇文章將作為我部落格的開始。以後將會把自己在程式設計師生活中學到的點點滴滴都記錄下來。

連續的自然數相加

正整數中有些數字是可以由連續的自然數相加而得,比如 1 2 3 4 5 9 2 3 4 9 這裡再列出它的三個問題 1 寫乙個程式,對於任意64位正整數,輸出它所有可能的連續自然數之和的算式?2 怎麼樣的數字是不能由連續的自然數相加而得,並且證明?3 64位正整數範圍內子串行數目最多的數是哪乙個?能...

隨機數相加等於固定值 批處理 隨機數相加等於固定值

為了測試等等,刪除了一部分東西,可以自己改回來 不限次數主迴圈是 be 每運算出一套 可用數值 後會暫停,並計數。echo off setlocal enabledelayedexpansion set p sj 請輸入隨機數 舉例 30 10 5 100 call ge sj set a mod ...

連續的自然數不是連續的實數

1,2 3 1,2,3 1,2,3 是連續的自然數,自然數都是整數,所以1,2,3是連續的整數。這沒錯。自然數也都是實數,所以 1,2 3 1,2,3 1,2,3 是連續的實數。這就不對了。為什麼不對?可以簡單的認為在自然數和整數上定義的連續有相同的意義。而在實數上的不同。不同在那裡呢?說幾個自然數...