| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1627 人关注过本帖, 1 人收藏
标题:请教只将符合条件的写入到指定文件
只看楼主 加入收藏
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:0 
你这个应该是12个元素的全排列,12!
 FOR H1=1 TO  hs
      b=Yb(h1)         
    FOR H2=1 TO hs
        c=Yb(h2)
        FOR H3=1 TO hs
算法看似不对头?
2015-05-24 20:43
xs591222
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:28
帖 子:682
专家分:1299
注 册:2009-3-1
收藏
得分:0 
以下是引用fdxxhjc在2015-5-24 17:38:58的发言:

先生,像:12、11、3;6、7、9、4;1、2、5、8、10这样就算不重复不遗漏。而像:12、11、3;6、7、9、4;1、2、4、9、10这样因9用了二次就算重复或者说5没用到就算遗漏了,谢谢先生


我只算好取3个数和为26的只有8种情况(共有220种状况)
CLOSE DATABASES
SELECT 0
USE csk3
ZAP

FOR i=1 to 12
  FOR j=i+1 to 11
    FOR k=j+1 to 12
     IF i+j+k=26
      APPEND BLANK
      REPLACE aa with i
      REPLACE bb with j
      REPLACE cc with k
      REPLACE tot with aa+bb+cc
     ENDIF  
    ENDFOR
  ENDFOR   
ENDFOR
BROWSE

后面还没想好 有点难

接下来只要对留下来的9个数(8种情况)进行取4个的进行筛选

[ 本帖最后由 xs591222 于 2015-5-24 21:13 编辑 ]
2015-05-24 21:09
fdxxhjc
Rank: 1
等 级:新手上路
帖 子:305
专家分:0
注 册:2014-4-10
收藏
得分:0 
回复 11楼 吹水佬
先生我的思路是:有a+b+c=26、d+e+f+g=26、h+i+j+k+l=26,用解方程组的方法可得:a = 26-b-c ; d = 26-e-f-g ; h = 26-i-j-k-l   。当其余9个字母循环一次且控制a、d、g三个字母大于等于1而又小于等于12时,必定能得到前面提到的三组值的和分别为26,但这其中必有许多的情况是有重复的,当能将已算得的且有重复的去掉后再写入到新表,问题就解决了,谢谢先生  
2015-05-25 07:53
fdxxhjc
Rank: 1
等 级:新手上路
帖 子:305
专家分:0
注 册:2014-4-10
收藏
得分:0 
以下是引用fdxxhjc在2015-5-25 07:53:59的发言:

先生我的思路是:有a+b+c=26、d+e+f+g=26、h+i+j+k+l=26,用解方程组的方法可得:a = 26-b-c ; d = 26-e-f-g ; h = 26-i-j-k-l   。当其余9个字母循环一次且控制a、d、g三个字母大于等于1而又小于等于12时,必定能得到前面提到的三组值的和分别为26,但这其中必有许多的情况是有重复的,当能将已算得的且有重复的去掉后再写入到新表,问题就解决了,谢谢先生  
我这里所说的思路前面几步在我的代码中已能达到,只有将无重复的写入到新表没能做到,请先生指点,谢谢
2015-05-25 07:56
fdxxhjc
Rank: 1
等 级:新手上路
帖 子:305
专家分:0
注 册:2014-4-10
收藏
得分:0 
回复 11楼 吹水佬
先生您好,我对代码作了修改,现在的关键是卡在比较这12个数中有否重复的了,请您帮我修改的位置在代码的注释中,谢谢
CLEAR
CLOSE  all
SET SAFETY OFF
 CREATE TABLE 横向搜索表(A1 N(20))
     FOR X = 2 TO  12  
    ALTER table 横向搜索表 ADD ('A'+TRANSFORM(X)) N(20)
    ENDFOR
*----------------------   
USE 原表
HS=RECCOUNT()
Dimension YB(HS)
select * from 原表 into array YB
*------------------------------------
USE 横向搜索表
  FOR H1=1 TO  hs
      列2=Yb(h1)         
    FOR H2=1 TO hs
        列3=Yb(h2)
        FOR H3=1 TO hs
            列5=Yb(h3)        
           FOR H4=1 TO  hs
              列6=Yb(h4)         
             FOR H5=1 TO  HS
                 列7=Yb(h5)         
                FOR H6=1 TO hs
                   列9=Yb(h6)
                  FOR H7=1 TO hs
                      列10=Yb(h7)        
                    FOR H8=1 TO  hs  
                        列11=Yb(h8)              
                      FOR H9=1 TO  HS
                          列12=Yb(h9)
         *---------     
           列1 = 26-列2-列3                        
           列4 = 26-列5-列6-列7
           列8 = 26-列9-列10-列11-列12                  
         *-----------                 
               IF  0>= 列1 OR  列1>=13  OR  0>=列4 OR 列4>=13  OR 0>=列8 OR 列8>=13   
                  LOOP      
               ENDIF  
             *888888888888888888888888888888888888888-----------------以下“ 888888888”之间的几行代码是检验列1——列12的12个数中有否重复,若有重复则返回,若无重复则写入到“横向搜索表”
               IF 列i==列j   &&  本身除外!               
                  LOOP
                  ELSE
               ENDIF                                    
             *888888888888888888888888888888888888888
                                                      
                                        APPEND BLANK                                    
                                        REPLACE  A1 WITH  列1
                                        REPLACE  A2 WITH  列2
                                        REPLACE  A3 WITH  列3  
                                        REPLACE  A4 WITH  列4
                                        REPLACE  A5 WITH  列5
                                        REPLACE  A6 WITH  列6
                                        REPLACE  A7 WITH  列7
                                        REPLACE  A8 WITH  列8
                                        REPLACE  A9 WITH  列9
                                        REPLACE  A10 WITH  列10
                                        REPLACE  A11 WITH  列11
                                        REPLACE  A12 WITH  列12                    
   *^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^   
          ENDFOR
         ENDFOR   
        ENDFOR        
       ENDFOR
      ENDFOR
     ENDFOR
    ENDFOR
   ENDFOR
 ENDFOR
* ##################################################################
 MESSAGEBOX('本 次 运 行 结 束 !!',64,'信息提示')
 DELETE FILE *.BAK
QUIT
2015-05-25 09:58
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:0 
将 列1....列12 放到数组,排序一下,重复的就排在一起。
2015-05-25 11:18
fdxxhjc
Rank: 1
等 级:新手上路
帖 子:305
专家分:0
注 册:2014-4-10
收藏
得分:0 
以下是引用吹水佬在2015-5-25 11:18:18的发言:

将 列1....列12 放到数组,排序一下,重复的就排在一起。
先生我想用边运行边检验,“检验不符时跳过,检验符合时写入”这样的模式,谢先生指点
2015-05-25 11:42
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:20 
以下是引用fdxxhjc在2015-5-25 09:58:03的发言:
             *888888888888888888888888888888888888888-----------------以下“ 888888888”之间的几行代码是检验列1——列12的12个数中有否重复,若有重复则返回,若无重复则写入到“横向搜索表”
               IF 列i==列j   &&  本身除外!               
                  LOOP
                  ELSE
               ENDIF                                    
             *888888888888888888888888888888888888888

就是这段代码
dime a列[12]
for i = 1 to 12
    a列[i] = eval("列"+tran(i))
endfor
asort(a列)
for i = 1 to 11
    if a列[i] == a列[i+1]
        exit
    endif
endfor
rele a列
if i < 12
   ** 有重复
endif
2015-05-25 11:55
fdxxhjc
Rank: 1
等 级:新手上路
帖 子:305
专家分:0
注 册:2014-4-10
收藏
得分:0 
以下是引用吹水佬在2015-5-25 11:55:27的发言:

 
就是这段代码
dime a列[12]
for i = 1 to 12
    a列 = eval("列"+tran(i))
endfor
asort(a列)
for i = 1 to 11
    if a列 == a列
        exit
    endif
endfor
rele a列
if i < 12
   ** 有重复
endif
先生我将您给的代码插入我原来的代码行(两行“88888888888888”之间部分),运行后还有重复的记录,是否是我插入的位置不对(插入后的代码下附:)
CLEAR
CLOSE  all
SET SAFETY OFF
 CREATE TABLE 横向搜索表(A1 N(20))
     FOR X = 2 TO  12  
    ALTER table 横向搜索表 ADD ('A'+TRANSFORM(X)) N(20)
    ENDFOR
*----------------------   
USE 原表
HS=RECCOUNT()
Dimension YB(HS)
select * from 原表 into array YB
*------------------------------------
USE 横向搜索表
  FOR H1=1 TO  hs
      列2=Yb(h1)         
    FOR H2=1 TO hs
        列3=Yb(h2)
        FOR H3=1 TO hs
            列5=Yb(h3)        
           FOR H4=1 TO  hs
              列6=Yb(h4)         
             FOR H5=1 TO  HS
                 列7=Yb(h5)         
                FOR H6=1 TO hs
                   列9=Yb(h6)
                  FOR H7=1 TO hs
                      列10=Yb(h7)        
                    FOR H8=1 TO  hs  
                        列11=Yb(h8)              
                      FOR H9=1 TO  HS
                          列12=Yb(h9)
         *---------     
           列1 = 26-列2-列3                        
           列4 = 26-列5-列6-列7
           列8 = 26-列9-列10-列11-列12                  
         *-----------                 
               IF  0>= 列1 OR  列1>=13  OR  0>=列4 OR 列4>=13  OR 0>=列8 OR 列8>=13   
                  LOOP      
               ENDIF  
*888888888888888888888888888888888888888-----------------以下“ 888888888”之间的几行代码是检验列1——列12的12个数中有否重复,若有重复则返回,若无重复则写入到“横向搜索表”
      dime a列[12]
        for i = 1 to 12
              a列[i] = eval("列"+tran(i))
        endfor
        asort(a列)
  for i = 1 to 11
    if a列[i] == a列[i+1]
        exit
    endif
  endfor
  rele a列
 if i < 12
   ** 有重复
 endif                             
*888888888888888888888888888888888888888
                                                      
                                        APPEND BLANK                                    
                                        REPLACE  A1 WITH  列1
                                        REPLACE  A2 WITH  列2
                                        REPLACE  A3 WITH  列3  
                                        REPLACE  A4 WITH  列4
                                        REPLACE  A5 WITH  列5
                                        REPLACE  A6 WITH  列6
                                        REPLACE  A7 WITH  列7
                                        REPLACE  A8 WITH  列8
                                        REPLACE  A9 WITH  列9
                                        REPLACE  A10 WITH  列10
                                        REPLACE  A11 WITH  列11
                                        REPLACE  A12 WITH  列12                    
   *^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^   
          ENDFOR
         ENDFOR   
        ENDFOR        
       ENDFOR
      ENDFOR
     ENDFOR
    ENDFOR
   ENDFOR
 ENDFOR
* ##################################################################
 MESSAGEBOX('本 次 运 行 结 束 !!',64,'信息提示')
 DELETE FILE *.BAK
QUIT
2015-05-25 13:59
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:0 
有重复时怎处理,是不是就不往下行?是就LOOP
if i < 12
   ** 有重复
   LOOP
endif
2015-05-25 14:05
快速回复:请教只将符合条件的写入到指定文件
数据加载中...
 
   



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

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