问题描述:<?XML:NAMESPACE PREFIX = O />

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

组合的个数限制在2 和3。

比如有数字(39,40,1,55,17,17……N)数字可以有重复。

找出的组合有(50,50),(21,41,39),(48,50)……M。在上面的数字在组合中每次只能出现一次(比如数字中40只出现过一次,那在组合中也只能出现一次。17出现过两次那在组合中最多两次)

实现现代码

-- 测试数据, value 列放要处理的数(此处随机生成100个数据)

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

-- 仅选出复合需求的数据(过滤重复数据)

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

-- 显示结果

SELECT vs FROM @r

转载于:https://www.cnblogs.com/wayne-ivan/archive/2007/06/29/800459.html

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

  1. 海量数据处理:在100亿个数中找出top 10000

    经典的TOP K问题,借助堆排序进行 前两天面试3面学长问我的这个问题(想说TEG的3个面试学长都是好和蔼,希望能完成最后一面,各方面原因造成我无比想去鹅场的心已经按捺不住了),这个问题还是建立最小堆 ...

  2. 如何从100万个数中找出最大的前100个数

    1.  算法如下:根据快速排序划分的思想  (1) 递归对所有数据分成[a,b)b(b,d]两个区间,(b,d]区间内的数都是大于[a,b)区间内的数  (2) 对(b,d]重复(1)操作,直到最右边 ...

  3. 从100万个数中找出最大的前100个数

    https://blog.csdn.net/cslbupt/article/details/65935577 1.算法如下:根据快速排序划分的思想 (1) 递归对所有数据分成[a,b)b(b,d]两个 ...

  4. 字节一面:如何从 100 亿 URL 中找出相同的 URL?

    点击关注公众号,Java干货及时送达 题目描述 给定 a.b 两个文件,各存放 50 亿个 URL,每个 URL 各占 64B,内存限制是 4G.请找出 a.b 两个文件共同的 URL. 解答思路 每 ...

  5. 如何从 100 亿 URL 中找出相同的 URL?

    来源 | https://doocs.github.io/advanced-java/ 题目描述 给定 a.b 两个文件,各存放 50 亿个 URL,每个 URL 各占 64B,内存限制是 4G.请找 ...

  6. 面试:如何从 100 亿 URL 中找出相同的 URL?

    题目描述 给定 a.b 两个文件,各存放 50 亿个 URL,每个 URL 各占 64B,内存限制是 4G.请找出 a.b 两个文件共同的 URL. " 推荐一个艿艿写的 6000+ Sta ...

  7. 1亿个数中找出最大的100个数(top K问题)

    如何在1亿个数中找出最大的100个数(top K问题) ​ 最容易想到的方法是将数据全部排序,然后在排序后的集合中进行查找,最快的排序算法的时间复杂度一般为O(nlogn),如快速排序.但是在32位的 ...

  8. 编写一个程序,从10亿个数字的数组中找出100个最大的数字

    本文翻译自:Write a program to find 100 largest numbers out of an array of 1 billion numbers I recently at ...

  9. 从10亿个数字中找出最大的前100个数

    先拿10000个数建堆,然后一次添加剩余元素,如果大于堆顶的数(10000中最小的),将这个数替换堆顶,并调整结构使之仍然是一个最小堆,这样,遍历完后,堆中的10000个数就是所需的最大的10000个 ...

最新文章

  1. python tkinter 实现一个秒表 从0开始_Writeathon:从0开始实现的一个side project
  2. GNU binutils 里的九种武器 | Linux 中国
  3. java同步list_Java集合--ArrayList出现同步问题的原因
  4. C语言指针的使用例子(1)指针地址的输出
  5. $().index() 两种用法
  6. 包含资金约束的多阶段报童模型
  7. 风尚云网学习-vue后台管理之金额大小写转换实例【精准到分0.01】保姆级教程
  8. Canvas常用API
  9. 网站死链接检测与完美处理方法
  10. 【影音基础】深度解析什么是HDR高动态范围?
  11. 测试晶面间距软件_i-TEM软件测量TEM高分辨像晶面间距.PDF
  12. 关于Connection aborted等问题的解决
  13. 骑士旅行问题的试探性算法研究
  14. 虚拟人,你们着实有点抢镜了(doge)
  15. 电影评分数据分析python_豆瓣电影简单评分模型-从收集数据到建模分析
  16. Python diag函数
  17. 前端经典项目案例练习-----小伙伴们都惊呆了
  18. 基于js利用经纬度进行两地的距离计算
  19. 小程聊微服务-数据抽取那点事(一)
  20. 计算机名加用户名盘符,硬盘该如何修改盘符名D/E/F/?

热门文章

  1. jsp判断字符串相等_leetcode 86 扰乱字符串(c++)
  2. ansys经典界面分析工字钢_ANSYS做一个工字钢的热分析
  3. odoo pivot中去掉求和_一文读懂深度学习中的卷积运算与图像处理
  4. palapa php,有什么办法可以在Android上运行PHP
  5. java 无法继承抽象类_java抽象类可以被继承吗?
  6. linux ftp上传下载文件,Linux下ftp命令上传下载文件
  7. python xpath提取转码_python-xpath获取html文档的部分内容
  8. java 数组中某个数出现的概率_剑指Offer解题报告(Java版)——排序数组中某个数的个数 38...
  9. LCD也可以模拟?这款模拟器别错过了!
  10. linux7补丁安全,CentOS自动打重要安全补丁