在有限多的不大于100的正整数中,找出尽量多个相加起来值介于98~102之间的组合...
问题描述:<?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之间的组合...相关推荐
- 海量数据处理:在100亿个数中找出top 10000
经典的TOP K问题,借助堆排序进行 前两天面试3面学长问我的这个问题(想说TEG的3个面试学长都是好和蔼,希望能完成最后一面,各方面原因造成我无比想去鹅场的心已经按捺不住了),这个问题还是建立最小堆 ...
- 如何从100万个数中找出最大的前100个数
1. 算法如下:根据快速排序划分的思想 (1) 递归对所有数据分成[a,b)b(b,d]两个区间,(b,d]区间内的数都是大于[a,b)区间内的数 (2) 对(b,d]重复(1)操作,直到最右边 ...
- 从100万个数中找出最大的前100个数
https://blog.csdn.net/cslbupt/article/details/65935577 1.算法如下:根据快速排序划分的思想 (1) 递归对所有数据分成[a,b)b(b,d]两个 ...
- 字节一面:如何从 100 亿 URL 中找出相同的 URL?
点击关注公众号,Java干货及时送达 题目描述 给定 a.b 两个文件,各存放 50 亿个 URL,每个 URL 各占 64B,内存限制是 4G.请找出 a.b 两个文件共同的 URL. 解答思路 每 ...
- 如何从 100 亿 URL 中找出相同的 URL?
来源 | https://doocs.github.io/advanced-java/ 题目描述 给定 a.b 两个文件,各存放 50 亿个 URL,每个 URL 各占 64B,内存限制是 4G.请找 ...
- 面试:如何从 100 亿 URL 中找出相同的 URL?
题目描述 给定 a.b 两个文件,各存放 50 亿个 URL,每个 URL 各占 64B,内存限制是 4G.请找出 a.b 两个文件共同的 URL. " 推荐一个艿艿写的 6000+ Sta ...
- 1亿个数中找出最大的100个数(top K问题)
如何在1亿个数中找出最大的100个数(top K问题) 最容易想到的方法是将数据全部排序,然后在排序后的集合中进行查找,最快的排序算法的时间复杂度一般为O(nlogn),如快速排序.但是在32位的 ...
- 编写一个程序,从10亿个数字的数组中找出100个最大的数字
本文翻译自:Write a program to find 100 largest numbers out of an array of 1 billion numbers I recently at ...
- 从10亿个数字中找出最大的前100个数
先拿10000个数建堆,然后一次添加剩余元素,如果大于堆顶的数(10000中最小的),将这个数替换堆顶,并调整结构使之仍然是一个最小堆,这样,遍历完后,堆中的10000个数就是所需的最大的10000个 ...
最新文章
- python tkinter 实现一个秒表 从0开始_Writeathon:从0开始实现的一个side project
- GNU binutils 里的九种武器 | Linux 中国
- java同步list_Java集合--ArrayList出现同步问题的原因
- C语言指针的使用例子(1)指针地址的输出
- $().index() 两种用法
- 包含资金约束的多阶段报童模型
- 风尚云网学习-vue后台管理之金额大小写转换实例【精准到分0.01】保姆级教程
- Canvas常用API
- 网站死链接检测与完美处理方法
- 【影音基础】深度解析什么是HDR高动态范围?
- 测试晶面间距软件_i-TEM软件测量TEM高分辨像晶面间距.PDF
- 关于Connection aborted等问题的解决
- 骑士旅行问题的试探性算法研究
- 虚拟人,你们着实有点抢镜了(doge)
- 电影评分数据分析python_豆瓣电影简单评分模型-从收集数据到建模分析
- Python diag函数
- 前端经典项目案例练习-----小伙伴们都惊呆了
- 基于js利用经纬度进行两地的距离计算
- 小程聊微服务-数据抽取那点事(一)
- 计算机名加用户名盘符,硬盘该如何修改盘符名D/E/F/?
热门文章
- jsp判断字符串相等_leetcode 86 扰乱字符串(c++)
- ansys经典界面分析工字钢_ANSYS做一个工字钢的热分析
- odoo pivot中去掉求和_一文读懂深度学习中的卷积运算与图像处理
- palapa php,有什么办法可以在Android上运行PHP
- java 无法继承抽象类_java抽象类可以被继承吗?
- linux ftp上传下载文件,Linux下ftp命令上传下载文件
- python xpath提取转码_python-xpath获取html文档的部分内容
- java 数组中某个数出现的概率_剑指Offer解题报告(Java版)——排序数组中某个数的个数 38...
- LCD也可以模拟?这款模拟器别错过了!
- linux7补丁安全,CentOS自动打重要安全补丁