标题:一个很难的循环问题![已经写出来了,感谢各位大侠](源码已贴出)【注释已 ...
只看楼主
hams
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:18
帖 子:912
专家分:3670
注 册:2008-7-30
得分:0 
要做这样的程序一点不难,只是代码写得有点长,以上只是提供一点思路,没有谁会花大量时间给你写这么一段不太有第二个人用得上的代码的,获得思路之后自己动手吧。

俺不高手,俺也是来学习的。
俺的意见不一定就对,当你不认同时请点忽视按钮。
当走到十字路口不知该如何走时,可在论坛问下路,但你若希望别人能一路把你送到目的地,显然是不现实的,因为别人也有自己要走的路。
2010-11-30 10:10
nvzhanshi
Rank: 2
等 级:论坛游民
帖 子:54
专家分:47
注 册:2010-11-28
得分:0 
呵呵,这个确实不难,就是需要些很多代码,效率方面我一直找不到最好的!现在已经写出来了,是按照我之前的思路写的,目前已经可以满足,5位的变量中,存在2个字母,并且位置不限。

同时很感激各位大侠给予的帮助!以上帮助过我的大侠如需源代码进行分析研究,可以跟帖!
2010-11-30 11:36
jansonwang
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:60
专家分:147
注 册:2010-11-25
得分:0 
参考一下这个
http://hi.baidu.com/aking_roc/blog/item/4f2e25f9ab0b5e05d9f9fdda.html
我也没仔细看过,但是我想可以学习下参考下
2010-11-30 11:37
jansonwang
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:60
专家分:147
注 册:2010-11-25
得分:0 
贴出来看看呗,大家都学习学习
2010-11-30 12:36
nvzhanshi
Rank: 2
等 级:论坛游民
帖 子:54
专家分:47
注 册:2010-11-28
得分:0 
因为中间有很多数据库的插入和查询,这里我就只把部分算法代码贴出来供大家参考。
本人小菜菜,代码写的效率不高,但是很直观,相信让不少新人得到启发!
同时也希望得到大侠们的批评和指点

以下是算法========================================
<%
a=request.form("qm")
b=request.form("zm")
x=0
dim ax(4),bx(4)
ax(0)=mid(a,1,1)
ax(1)=mid(a,2,1)
ax(2)=mid(a,3,1)
ax(3)=mid(a,4,1)
ax(4)=mid(a,5,1)
bx(0)=mid(b,1,1)
bx(1)=mid(b,2,1)
bx(2)=mid(b,3,1)
bx(3)=mid(b,4,1)
bx(4)=mid(b,5,1)

for i=0 to 4
if IsNumeric(ax(i)) then
else
if x=1 then
    d=ax(i)
    di=i+1
    x=x+1
else
    c=ax(i)
    ci=i+1
    x=x+1
end if
end if
next

if x=1 then
aa=left(a,ci-1)&right(a,5-ci)
bb=left(b,ci-1)&right(b,5-ci)
end if

if x=2 then
   if ci=1 then   
      if di=2 then  
         aa=right(a,3)
         bb=right(b,3)      
      elseif di=3 then
         aa=mid(a,2,1)&right(a,2)  
         bb=mid(b,2,1)&right(b,2)
      elseif di=4 then   
         aa=mid(a,2,2)&right(a,1)
         bb=mid(b,2,2)&right(b,1)
      elseif di=5 then
         aa=mid(a,2,3)
         bb=mid(b,2,3)
      end if
   end if
   if ci=2 then
      if di=3 then         
         aa=left(a,1)&right(a,2)
         bb=left(b,1)&right(b,2)
      elseif di=4 then
         aa=left(a,1)&mid(a,3,1)&right(a,1)
         bb=left(b,1)&mid(b,3,1)&right(b,1)
      elseif di=5 then
         aa=left(a,1)&mid(a,3,2)
         bb=left(b,1)&mid(b,3,2)
      end if
   end if
   if ci=3 then
      if di=4 then
         aa=left(a,2)&right(a,1)
         bb=left(b,2)&right(b,1)
      elseif di=5 then
         aa=left(a,2)&mid(a,4,1)
         bb=left(b,2)&mid(b,4,1)
      end if
   end if
   if ci=4 then
      if di=5 then
         aa=left(a,3)
         bb=left(b,3)
      end if
   end if
end if

for j=aa to bb
if x=1 then
   if mid(j,1,1)=4 or mid(j,2,1)=4 or mid(j,3,1)=4 or mid(j,4,1)=4 then
   else
   hp=left(j,ci-1)&c&right(j,5-ci)
   '(sql=******)数据库操作已删除
   end if
end if
if x=2 then
   if mid(j,1,1)=4 or mid(j,2,1)=4 or mid(j,3,1)=4 then
   else
   if ci=1 then   
      if di=2 then
         hp=c&d&right(j,3)
        '(sql=******)数据库操作已删除
      elseif di=3 then
         hp=c&mid(j,2,1)&d&right(j,2)  
        '(sql=******)数据库操作已删除
      elseif di=4 then  
         hp=c&mid(j,1,2)&d&right(j,1)
        '(sql=******)数据库操作已删除
      elseif di=5 then  
         hp=c&mid(j,1,3)&d
       '(sql=******)数据库操作已删除
      end if
   end if
   if ci=2 then
      if di=3 then         
         hp=left(j,1)&c&d&right(j,2)
       '(sql=******)数据库操作已删除
      elseif di=4 then
         hp=left(j,1)&c&mid(j,2,1)&d&right(j,1)
       '(sql=******)数据库操作已删除
      elseif di=5 then
         hp=left(j,1)&c&mid(j,2,2)&d
       '(sql=******)数据库操作已删除
      end if
   end if
   if ci=3 then
      if di=4 then
         hp=left(j,2)&c&d&right(j,1)
       '(sql=******)数据库操作已删除
      elseif di=5 then
         hp=left(j,2)&c&mid(j,3,1)&d
        '(sql=******)数据库操作已删除
      end if
   end if
   if ci=4 then
      if di=5 then
         hp=left(j,3)&c&d
        '(sql=******)数据库操作已删除
      end if
   end if
   end if
end if
next
%>
以上是算法=============================================
2010-11-30 13:08
gupiao175
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:40
帖 子:1787
专家分:7527
注 册:2007-6-27
得分:0 
哎,楼上的代码不是说新手能否看懂的问题,而是我也根本看不懂, 无任何注解! 最起码应该把那几个常见的变量或数组指代的意思说明一下!

还有一点发现一个有点怪的地方:
for i=0 to 4
if IsNumeric(ax(i)) then
else '为什么要这么写呢?
if x=1 then
    d=ax(i)
    di=i+1
    x=x+1
else
    c=ax(i)
    ci=i+1
    x=x+1
end if
end if
next
改为:
 for i=0 to 4
   if IsNumeric(ax(i))=false then
       if x=1 then
          d=ax(i)
          di=i+1
          x=x+1
       else
         c=ax(i)
         ci=i+1
         x=x+1
      end if
   end if
next
这样看起来也简单直观些!

Q:1428196631,百度:开发地 即可找到我,有事请留言!
2010-11-30 17:08
nvzhanshi
Rank: 2
等 级:论坛游民
帖 子:54
专家分:47
注 册:2010-11-28
得分:0 
页面获取的数据
起码:123W7   止码:124W1
<%
a=request.form("qm")    '123W7
b=request.form("zm")    '124W1
x=0                     '用于字母的个数
dim ax(4),bx(4)         '定义数组
ax(0)=mid(a,1,1)        '将起码分离成单个字符存入数组ax
ax(1)=mid(a,2,1)
ax(2)=mid(a,3,1)
ax(3)=mid(a,4,1)
ax(4)=mid(a,5,1)
bx(0)=mid(b,1,1)        '将至码分离成单个字符存入数组bx
bx(1)=mid(b,2,1)
bx(2)=mid(b,3,1)
bx(3)=mid(b,4,1)
bx(4)=mid(b,5,1)

for i=0 to 4
if IsNumeric(ax(i)) then     '如果ax(i)是数字,那么什么也不干
else                         '否则
if x=1 then                  '===============================
    d=ax(i)                  '如果x=1,那么把字母赋值给d
    di=i+1                   '将字母的位置赋值给di
    x=x+1                    '将x+1,增至2
else                         '否则
    c=ax(i)                  '把字母赋值给c
    ci=i+1                   '将字母的位置赋值给ci
    x=x+1                    '将x+1,增至1
end if                       '===============================
end if
next

if x=1 then                          '如果x=1,也就是只有1个字母,那么
aa=left(a,ci-1)&right(a,5-ci)        '将起码中的数字重组aa=left(a,4-1)&right(a,5-4)  aa=1237
bb=left(b,ci-1)&right(b,5-ci)        '将止码中的数字重组bb=left(b,4-1)&right(b,5-4)  bb=1241
end if

if x=2 then                              '如果x=2,也就是有2个字母,那么
   if ci=1 then                          '如果第1个字母在第一个位置,那么
      if di=2 then                       '如果第2个字母在第二个位置,那么
         aa=right(a,3)                   '将起码中的数字重组
         bb=right(b,3)                   '将止码中的数字重组
      elseif di=3 then                   'else如果第2个字母在第三个位置,那么
         aa=mid(a,2,1)&right(a,2)        '将起码中的数字重组
         bb=mid(b,2,1)&right(b,2)        '将止码中的数字重组
      elseif di=4 then                   '以下解释省略了,都是这样
         aa=mid(a,2,2)&right(a,1)        '首先判断字母位置在12,13,14,15
         bb=mid(b,2,2)&right(b,1)        '然后判断字母位置在23,24,25
      elseif di=5 then                   '再判断字母位置在  34,35
         aa=mid(a,2,3)                   '最后判断字母位置在45
         bb=mid(b,2,3)
      end if
   end if
   if ci=2 then
      if di=3 then         
         aa=left(a,1)&right(a,2)
         bb=left(b,1)&right(b,2)
      elseif di=4 then
         aa=left(a,1)&mid(a,3,1)&right(a,1)
         bb=left(b,1)&mid(b,3,1)&right(b,1)
      elseif di=5 then
         aa=left(a,1)&mid(a,3,2)
         bb=left(b,1)&mid(b,3,2)
      end if
   end if
   if ci=3 then
      if di=4 then
         aa=left(a,2)&right(a,1)
         bb=left(b,2)&right(b,1)
      elseif di=5 then
         aa=left(a,2)&mid(a,4,1)
         bb=left(b,2)&mid(b,4,1)
      end if
   end if
   if ci=4 then
      if di=5 then
         aa=left(a,3)
         bb=left(b,3)
      end if
   end if
end if

for j=aa to bb                                                                '循环1237 to 1241
if x=1 then                                                                   '如果x=1,只有1个字母,那么
   if mid(j,1,1)=4 or mid(j,2,1)=4 or mid(j,3,1)=4 or mid(j,4,1)=4 then       '如果j中某一位是4,那么什么也不干
   else                                                                       '否则
   hp=left(j,ci-1)&c&right(j,5-ci)                                            '号牌重组hp=left(j,ci-1)&c&right(j,5-ci) ci是字
母的位置  c是字母
   '(sql=******)数据库操作已删除
   end if
end if
if x=2 then
   if mid(j,1,1)=4 or mid(j,2,1)=4 or mid(j,3,1)=4 then                     '下面是重组2个字母的号牌,不解释了,和上面分离字
母的算法是一样的
   else
   if ci=1 then   
      if di=2 then
         hp=c&d&right(j,3)
        '(sql=******)数据库操作已删除
      elseif di=3 then
         hp=c&mid(j,2,1)&d&right(j,2)  
        '(sql=******)数据库操作已删除
      elseif di=4 then  
         hp=c&mid(j,1,2)&d&right(j,1)
        '(sql=******)数据库操作已删除
      elseif di=5 then  
         hp=c&mid(j,1,3)&d
       '(sql=******)数据库操作已删除
      end if
   end if
   if ci=2 then
      if di=3 then         
         hp=left(j,1)&c&d&right(j,2)
       '(sql=******)数据库操作已删除
      elseif di=4 then
         hp=left(j,1)&c&mid(j,2,1)&d&right(j,1)
       '(sql=******)数据库操作已删除
      elseif di=5 then
         hp=left(j,1)&c&mid(j,2,2)&d
       '(sql=******)数据库操作已删除
      end if
   end if
   if ci=3 then
      if di=4 then
         hp=left(j,2)&c&d&right(j,1)
       '(sql=******)数据库操作已删除
      elseif di=5 then
         hp=left(j,2)&c&mid(j,3,1)&d
        '(sql=******)数据库操作已删除
      end if
   end if
   if ci=4 then
      if di=5 then
         hp=left(j,3)&c&d
        '(sql=******)数据库操作已删除
      end if
   end if
   end if
end if
next
%>

希望这下大家能看懂了!
同时
if IsNumeric(ax(i)) then
else '为什么要这么写呢?
因为我没考虑到还可以
if IsNumeric(ax(i))=false then

呵呵,感谢gupiao175大侠的指点!
2010-12-01 13:23



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-327181-1-1.html




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

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