求一设计思路和算法

时间:2021-10-12 09:47:47

有一数组A(a1,a2,..an) 从一数字开始顺序流水号,如1,2,3,4,..100
(可以理解成按顺序的盒子)
另一数组B(b1,b2,..bn) 也是从一数字开始顺序流水号,如1,2,3,4,..1000  
        (可以理解成按顺序的球)


A与B的关系:每一个A包含B的数量为K,且都是按顺充包含,如:a1包含b1,b2,...b10 
  a2包含b11,b12,...b20
        (可以理解成按盒的编号顺序放球,每一个盒子的数量为k)


   求:1.任一个A中B的编号列表
       2.任一个B属于A的编号 



另还有两组数
   C组C(C1,C2,...Cn) 列出A组数量需要去掉的数字,
         (可以理解成按顺序的盒子中坏掉的盒子)
   D组D(D1,D2,...Dn) 列出B组数量需要去掉的数字 如,3,7 表示B组数中3和7不存在
         (可以理解成按顺序的球中坏掉的球)


  A与B的关系还是一样,每一个A包含B的数量为K,但遇到C组和D组数中存在的将跳过,
    由下一个数补上
      (可以理解成按盒的编号顺序放球,每一个盒子的数量为k,坏掉的盒子和球不用)


同样    求:1.任一个A中B的编号列表
            2.任一个B属于A的编号 


         以上是我实际工作中遇到的一个难题,请大家帮忙解决

7 个解决方案

#1


学习

#2


你是想写程序,还是写存储过程?

#3


這樣放的話數組A中每個元素所包含的數組B的元素個數不一定相同吧

也就是說An中所包括的數組B的元素個數祇能是小於或等於A1(或A2,或A3...或An-1)中所包括的數組B的元素的

換言之,最後一個盒子中的球數應該是小於或等於其他每個盒子中的球數的,是嗎?因為球的數量不一定正好是盒子數量的整數倍

#4


可以设计三张表

1 AB表,字段:A编号,B编号

2 C表,字段:A编号
3 D表,字段:B编号



AB表数据
A编号,B编号
1     1
1     2
...
1     10
2     11
2     12
...
2      20
...


C表数据
A编号 
5
8


D表数据
B编号 
3
7

你的要求的实现:
求:1.任一个A中B的编号列表
select B编号 from AB where A编号=3  order by B编号

    2.任一个B属于A的编号 
select A编号 from AB where B编号=11  order by A编号


1.考虑CD任一个A中B的编号列表
select B编号 from AB x where A编号=3 
and not exists (
select 1 from C where A编号=x.A编号
)
and not exists (
select 1 from D where B编号=x.B编号
)
order by B编号

            2.任一个B属于A的编号 
select A编号 from AB x where B编号=11 
and not exists (
select 1 from C where A编号=x.A编号
)
and not exists (
select 1 from D where B编号=x.B编号
)
order by A编号




#5


上面的not exists语句可以用not in代替,好理解些,但是一般情况not exists效率高些

#6


补充:
a和b只给出起始值,如a1=1,b1=1 ,a和b可以看成是无穷大
k值是可以任意给的

TO:Haiwer(海阔天空)  AB用数据库会比较大,数据量要注意是无穷大

#7


补充:
a和b只给出起始值,如a1=1,b1=1 ,a和b可以看成是无穷大
k值是可以任意给的

TO:Haiwer(海阔天空)  AB用数据库会比较大,数据量要注意是无穷大
--------------------------------------------------------------
理论上,任何数据库处理不了无穷大
如果度是很有规律的,可以考虑不使用数据库,在客户端循环解决

#1


学习

#2


你是想写程序,还是写存储过程?

#3


這樣放的話數組A中每個元素所包含的數組B的元素個數不一定相同吧

也就是說An中所包括的數組B的元素個數祇能是小於或等於A1(或A2,或A3...或An-1)中所包括的數組B的元素的

換言之,最後一個盒子中的球數應該是小於或等於其他每個盒子中的球數的,是嗎?因為球的數量不一定正好是盒子數量的整數倍

#4


可以设计三张表

1 AB表,字段:A编号,B编号

2 C表,字段:A编号
3 D表,字段:B编号



AB表数据
A编号,B编号
1     1
1     2
...
1     10
2     11
2     12
...
2      20
...


C表数据
A编号 
5
8


D表数据
B编号 
3
7

你的要求的实现:
求:1.任一个A中B的编号列表
select B编号 from AB where A编号=3  order by B编号

    2.任一个B属于A的编号 
select A编号 from AB where B编号=11  order by A编号


1.考虑CD任一个A中B的编号列表
select B编号 from AB x where A编号=3 
and not exists (
select 1 from C where A编号=x.A编号
)
and not exists (
select 1 from D where B编号=x.B编号
)
order by B编号

            2.任一个B属于A的编号 
select A编号 from AB x where B编号=11 
and not exists (
select 1 from C where A编号=x.A编号
)
and not exists (
select 1 from D where B编号=x.B编号
)
order by A编号




#5


上面的not exists语句可以用not in代替,好理解些,但是一般情况not exists效率高些

#6


补充:
a和b只给出起始值,如a1=1,b1=1 ,a和b可以看成是无穷大
k值是可以任意给的

TO:Haiwer(海阔天空)  AB用数据库会比较大,数据量要注意是无穷大

#7


补充:
a和b只给出起始值,如a1=1,b1=1 ,a和b可以看成是无穷大
k值是可以任意给的

TO:Haiwer(海阔天空)  AB用数据库会比较大,数据量要注意是无穷大
--------------------------------------------------------------
理论上,任何数据库处理不了无穷大
如果度是很有规律的,可以考虑不使用数据库,在客户端循环解决