-- 测试数据, 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 #<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="True" sourcevalue="1" unitname="a">1 A</chmetcnv>
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 #<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="True" sourcevalue="1" unitname="a">1 A</chmetcnv>, @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
相关推荐
随机生成5个不大于100的整数存入一数组,计算该数组的平均值,输出该5个整数及平均值
给定程序中,函数fun的功能是:在任意给定的9个正整数中找出按升序排列是处于中间的数,将原数据序列中比该中间数小的数用该中间数替换,位置不变,在主函数中输出处理后的数据序列,并将中间数作为函数值返回。...
C语言程序设计-找出一批正整数中的最大的偶数;
设a 和b 是2 个正整数,a≤b,找出a 和b之间约数个数最多的数x。 编程任务:对于给定的2 个正整数a≤b,编程计算a 和b 之间约数个数最多的数。 Input 输入数据的第1 行有2 个正整数a和b。 Output 程序运行结束时...
设a 和b是2 个正整数,a≤b,找出a 和b之间约数个数最多的数x。 算法设计: 对于给定的2 个正整数a 计算a 和b之间约数个数最多的数。 可以保证a和b都不超过2000000. 数据输入: 输入数据有2个正整数a和b。 结果...
分析:求解k个数的不同组合,我们可以用一维数组a[0]~a[k-1]来保存其中的一个结果,因为组合元 素是不重复的,可以约定其递增排列,因为数组中的元素是递增排列的: 所以a[k-1]即组合中的最后一个数,只能为k~n 令i=...
C语言程序设计-找出一个大于给定整数且紧随这个整数的素数,并作为函数值返回;
从输入的一批正整数中求出最大值、最小值和平均值,输入0结束数据的输入。C语言程序
C语言程序 对一个大于或等于3的正整数,判断它是不是一个素数
给定一个正整数a,以及另外的5个正整数,问题是:这5个整数中,小于a的整数的和是多少? 输入要求 输入一行,只包括6个小于100的正整数,其中第一个正整数就是a。 输出要求 输出一行,给出一个正整数,是5个数中...
求任意两个正整数之间的素数,C语言代码程序简洁,好懂比书上的简单。
补充2019-07-18的源码《将一个正整数拆分成若干个正整数的和》
给定一个整数n,求出所有连续的且和为n正整数。比如对于整数27,结果为2~7、8~10、13和14,因为这些数之间的整数的和都是27。注意:并不是所有的整数都有结果,例如不存在连续的整数和为16。为了提高计算的效率,...
从键盘先后输入两个不大于9999的正整数m和n,若m>n,则交换两数。然后求m~n(m和n均为正整数且m≤n)之间的所有完数。 【输入形式】 先后输入两个正整数m和n,用逗号分隔 【输出形式】 输出所有完数,每两个数...
编写程序。输入一整数,将其值按小于10、10~99、100~999、1000以上分类显示。例如:输入782时,显示782是100~999之间的数(提示:可用if语句或switch语句编写)。
(2)创建一个包含15个不大于100的正整数值的线性表(15个值由计算机随机产生);(3)将一个数插在第i个元素前(i在程序运行时输入);(4)删除第i个元素(i在程序运行时输入);(5)输出线性表中所有元素。 2)...
大于1 的正整数n可以分解为:n=x1*x2*…*xm。 例如,当n=12 时,共有8 种不同的分解式: 12=12; 12=6*2; 12=4*3; 12=3*4; 12=3*2*2; 12=2*6; 12=2*3*2; 12=2*2*3。 编程任务: 对于给定的正整数n,编程...
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。 (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。 【程序5】 题目:利用条件运算符的嵌套来完成此题...
用递归法计算从n个正整数中选择k个数的不同组合数
素数又叫质数,质数是指在大于1的自然数中,除了1和它本身以外,不能被其他自然数整除的数。 问题: 输入一个整数n,输出1~n中的素数,里有详细解释,有问题也欢迎留言!谢谢支持啦~