在有限多的不大于100的正整数中,找出尽量多个相加起来值介于98~102之间的组合
来源:互联网 发布:origin8软件使用教程 编辑:程序博客网 时间:2024/05/16 12:40
问题描述:
在有限多的不大于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 #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
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zjcxc/archive/2006/09/17/1233119.aspx
- 在有限多的不大于100的正整数中,找出尽量多个相加起来值介于98~102之间的组合
- 在有限多的不大于100的正整数中,找出尽量多个相加起来值介于98~102之间的组合
- 在有限多的不大于100的正整数中,找出尽量多个相加起来值介于98~102之间的组合
- 在有限多的不大于100的正整数中,找出尽量多个相加起来值介于98~102之间的组合
- 在有限多的不大于100的正整数中,找出尽量多个相加起来值介于98~102之间的组合
- 在有限多的不大于100的正整数中,找出尽量多个相加起来值介于98~102之间的组合
- 在有限多的不大于100的正整数中,找出尽量多个相加起来值介于98~102之间的组合
- 在有限多的不大于100的正整数中,找出尽量多个相加起来值介于98~102之间的组合
- 在有限多的不大于100的正整数中,找出尽量多个相加起来值介于98~102之间的组合
- 在有限多的不大于100的正整数中,找出尽量多个相加起来值介于98~102之间的组合
- 在有限多的不大于100的正整数中,找出尽量多个相加起来值介于98~102之间的组合
- 在有限多的不大于100的正整数中,找出尽量多个相加起来值介于98~102之间的组合
- 在有限多的不大于100的正整数中,找出尽量多个相加起来值介于98~102之间的组合
- 求不大于n的正整数的阶乘的和
- 求一个正整数不大于它的偶数
- 在不大于某解内n个数最多可以组合成多大的数
- 找出数组中第一个不出现的正整数
- 在1~500这500个整数中,找出连续相加等于500的数?
- C# 环境变量path
- VC常用数据类型使用转换详解(时常碰到类型转换问题)
- Squid3.0的安装配置
- 用js实现对text 输入框的限制
- xampp 域名配置
- 在有限多的不大于100的正整数中,找出尽量多个相加起来值介于98~102之间的组合
- 给专计算机业学生的忠告! 转贴
- pku 2456 Aggressive cows(二分数值测试)
- 用PHP生成验证码可以进行点击刷新
- RTSP协议详解
- 学习计划
- vs2005 team suit &vs2005 SP1下载
- 自动生成 Makefile 的全过程详解! automake/autoconf 入门
- UPDATE 时, 如何避免数据定位处理被阻塞