| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1171 人关注过本帖
标题:如何用最简单的方法显示出来
只看楼主 加入收藏
xwcj
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-9-8
收藏
得分:0 
谢谢
2011-11-10 15:09
qingfameng
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:35
帖 子:964
专家分:3019
注 册:2010-2-6
收藏
得分:0 
如果不计较顺序,应有 2*2*2*2=16 种组合(简单一点)如果计较顺序,应有(2*2*2*2)*4!=384 种排列(麻烦一点).下面是计较顺序的排列。有点笨。因为不是N~M 组合通式,为解而解。虽啰嗦,但是好理解一点。仅供参考。

close ALL
set excl on
do pp
close all
use yy
brow
close all
return
**************************

procedure pp
 create cursor aa (a c(1),b c(1))
 insert into aa (a,b) value ('A','B')
 insert into aa (a,b) value ('C','D')
 insert into aa (a,b) value ('E','F')
 insert into aa (a,b) value ('G','H')
 create cursor dd (s1 c(1),s2 c(1),s3 c(1),s4 c(1),s5 c(1),s6 c(1),s7 c(1),s8 c(1),;
 s9 c(1),s10 c(1),s11 c(1),s12 c(1),s13 c(1),s14 c(1),s15 c(1),s16 c(1))
 create table yy (e c(4))
       m=1   
       sele aa
       go 3
       nre=recno()   
       scatter to k
    do while m<4
       select * from aa into table bb where recno()<3 order by a
       p1()
    enddo
       m=1
    do while m<4
       select * from aa into table bb where recno()<3 order by a desc
       p1()
    enddo
    return

procedure p1
   sele bb
   if m<3
      go m
      insert blank before
      gather from k
   else
      append blank
      gather from k
   endif
      m=m+1
      p2()
 return


procedure p2
   r=1
   sele aa
   go 4
   scatter to j
   do while r<5   
      select * from bb into table cc
       sele cc
       if r<4
          go r
          insert blank before
          gather from j
       else
          append blank
          gather from j
       endif
          r=r+1
          p3()
  enddo
  return  
   
procedure p3
 sele cc
 go 1
 cs1=a
 cs2=b
 insert into dd (s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15,s16);
 value (cs1,cs2,cs2,cs1,cs1,cs2,cs2,cs1,cs1,cs2,cs2,cs1,cs1,cs2,cs2,cs1)
 go 2
 cs1=a
 cs2=b
 insert into dd (s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15,s16);
 value (cs1,cs1,cs2,cs2,cs1,cs1,cs2,cs2,cs1,cs1,cs2,cs2,cs1,cs1,cs2,cs2)
 go 3
 cs1=a
 cs2=b
 insert into dd (s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15,s16);
 value (cs1,cs1,cs1,cs1,cs2,cs2,cs2,cs2,cs1,cs1,cs1,cs1,cs2,cs2,cs2,cs2)
 go 4
 cs1=a
 cs2=b
 insert into dd (s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15,s16);
 value (cs1,cs1,cs1,cs1,cs1,cs1,cs1,cs1,cs2,cs2,cs2,cs2,cs2,cs2,cs2,cs2)

 sele dd
 w=1
 do while w<17
    go top
    ssj=''
    do while.not.eof()
       ss='s'+alltrim(str(w))
       ssj=ssj+&ss
       skip
    enddo
    insert into yy (e) value (ssj)   
    w=w+1
 enddo
 sele dd
 zap
 return
 

[ 本帖最后由 qingfameng 于 2011-11-11 02:55 编辑 ]
2011-11-11 02:47
panpende
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:528
专家分:963
注 册:2009-4-27
收藏
得分:0 
SET TALK OFF
CLEAR ALL
CLEAR
CREATE CURSOR LA (A1 C(4))
S8='ABCDEFGH'
FOR A=1 TO 8
T1=SUBSTR(S8,A,1)
S7=STRTRAN(S8,T1,'')  
FOR B=1 TO 7
T2=SUBSTR(S7,B,1)
S6=STRTRAN(S7,T2,'')
FOR C=1 TO 6
T3=SUBSTR(S6,C,1)
S5=STRTRAN(S6,T3,'')
FOR D=1 TO 5
T4=SUBSTR(S5,D,1)
S4=STRTRAN(S5,T4,'')

Z=T1+T2+T3+T4
IF !(('A'$Z .AND. 'B'$Z) .OR. ('C'$Z .AND. 'D'$Z) .OR. ('E'$Z .AND. 'F'$Z) .OR. ('G'$Z .AND. 'H'$Z))
APPEND BLANK
REPLACE A1 WITH Z
ENDIF

ENDFOR &&5
ENDFOR &&6
ENDFOR &&7
ENDFOR &&8
BROWSE
RETURN


以上代码的方法,可以用于扩展范围。例如5组,6组..等等。
2011-11-12 11:21
apple0072011
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:249
专家分:989
注 册:2011-8-17
收藏
得分:0 
如果S8="11111111" 程序结果如何

天道酬勤
2011-11-14 11:55
panpende
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:528
专家分:963
注 册:2009-4-27
收藏
得分:0 
应该无记录或者有一个记录'1111'。这不是需要的目的。但是,一定要包容这样的特殊情况,增加几句命令还是可以去除重复的记录,成为通用程序。
2011-11-14 12:27
快速回复:如何用最简单的方法显示出来
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027995 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved