日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

在有限多的不大于100的正整数中,找出尽量多个相加起来值介于98~102之间的组合...

發(fā)布時(shí)間:2023/12/18 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在有限多的不大于100的正整数中,找出尽量多个相加起来值介于98~102之间的组合... 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

問(wèn)題描述:<?XML:NAMESPACE PREFIX = O />

在有限多的不大于100的正整數(shù)中,找出盡量多個(gè)相加起來(lái)值介于98102之間的組合。

組合的個(gè)數(shù)限制在2 3

比如有數(shù)字(39401551717……N)數(shù)字可以有重復(fù)。

找出的組合有(5050),(214139),(4850)……M。在上面的數(shù)字在組合中每次只能出現(xiàn)一次(比如數(shù)字中40只出現(xiàn)過(guò)一次,那在組合中也只能出現(xiàn)一次。17出現(xiàn)過(guò)兩次那在組合中最多兩次)

?

實(shí)現(xiàn)現(xiàn)代碼

-- 測(cè)試數(shù)據(jù), value 列放要處理的數(shù)(此處隨機(jī)生成100個(gè)數(shù)據(jù))

DECLARE @t TABLE(

??? id int identity,

??? value int)

INSERT @t SELECT TOP 100 CHECKSUM(NEWID()) % 100 FROM syscolumns

?

--=====================================================

-- 組合處理

--=====================================================

DECLARE @r TABLE(

??? id int IDENTITY,

??? vs varchar(100))

DECLARE @tid TABLE(id int PRIMARY KEY)

?

IF OBJECT_ID('tempdb..#1') IS NOT NULL

??? DROP TABLE #1

SELECT

??? id1 = A.id, value1 = A.value,

??? id2 = B.id, value2 = B.value,

??? value = A.value + B.value,

??? flag = CASE WHEN A.value + B.value BETWEEN 98 AND 102 THEN 1 ELSE 0 END

INTO #1

FROM @t A, @t B

WHERE A.id < B.id

?

DECLARE tb CURSOR STATIC LOCAL

FOR

SELECT id1, id2, id3, vs

FROM(

??? -- 二次組合的

??? SELECT flag = 2,

??????? A.id1, A.id2, id3 = NULL,

??????? vs = RTRIM(A.value1) + ',' + RTRIM(A.value2)

??? FROM #<?XML:NAMESPACE PREFIX = ST1 />1 A

??? WHERE flag = 1

??? UNION ALL

??? -- 三次組合的

??? SELECT flag = 3,

??????? A.id1, A.id2, id3 = B.id,

??????? RTRIM(A.value1) + ',' + RTRIM(A.value2) + ',' + RTRIM(B.value)

??? FROM #1 A, @t B

??? WHERE A.id2 < B.id

??????? AND A.value + B.value BETWEEN 98 AND 102

)A

ORDER BY flag DESC

?

-- 僅選出復(fù)合需求的數(shù)據(jù)(過(guò)濾重復(fù)數(shù)據(jù))

DECLARE @id1 int, @id2 int, @id3 int, @values varchar(100)

OPEN tb

FETCH tb INTO @id1, @id2, @id3, @values

WHILE @@ROWCOUNT > 0

BEGIN

??? IF NOT EXISTS(

??????????? SELECT * FROM @tid WHERE id IN(@id1, @id2, @id3))

??? BEGIN

??????? INSERT @r VALUES(@values)

??????? INSERT @tid SELECT *

??????? FROM(

??????????? SELECT id = @id1 UNION ALL SELECT @id2 UNION ALL SELECT @id3

??????? )A WHERE id > 0

??? END

??? FETCH tb INTO @id1, @id2, @id3, @values

END

CLOSE tb

DEALLOCATE tb

?

-- 顯示結(jié)果

SELECT vs FROM @r

轉(zhuǎn)載于:https://www.cnblogs.com/wayne-ivan/archive/2007/06/29/800459.html

總結(jié)

以上是生活随笔為你收集整理的在有限多的不大于100的正整数中,找出尽量多个相加起来值介于98~102之间的组合...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。