| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1049 人关注过本帖
标题:关于算法的问题
取消只看楼主 加入收藏
qq402716710
Rank: 1
等 级:新手上路
帖 子:91
专家分:0
注 册:2013-1-14
结帖率:92.86%
收藏
已结贴  问题点数:20 回复次数:6 
关于算法的问题
我想做一个输入N之后的出来N个9到0的数
程序代码:
Clear
Set Escape On
Input To N
m=Replicate("9",N)
a=Right(m,1)
j=1
g=0
For i=Val(a) To 0 Step -1
    IF j=1
      x=Substr(m,1,N-j-1)+Substr(m,N-j,1)+Alltrim(Str(i))
    ELSE
       IF j= n
          x=Substr(m,N-j+1,2)+Alltrim(Str(i))
       else
          x=Substr(m,1,N-j)+Substr(m,N-j+1,1)+Alltrim(Str(i))
       endif
    endif
    If Alltrim(Str(i))='0'
        ?Transform(x)
    Endif
    If i=0
        If Val(Substr(x,N-j+1,1))-1=-1    &&判断将要减1的位数是否为0
            For u=j+1 To N Step +1
                If Val(Substr(x,N-u+1,1))-1<>-1  &&判断将要减1的位数是否为0
                    g=u
                    z=Replicate("9",u-1)
                    x=Alltrim(Substr(x,1,N-u))+Alltrim(Str(Val(Substr(x,N-u+1,1))-1))+z
                    m=x
                    u=N+1
                    j=j+1
                    i=9
                Endif
            Endfor
*!*             ELSE
*!*                if  Val(Substr(x,N-g+2,1))-1<>-1
*!*                   z=Replicate("9",g-2)
*!*                   x=Alltrim(Substr(x,1,N-g+1))+Alltrim(Str(Val(Substr(x,N-g+2,1))-1))+z
*!*                   i=9
*!*                   m=x
*!*                else
*!*                   z=Replicate("9",g-1)
*!*                   x=Alltrim(Substr(x,1,N-g))+Alltrim(Str(Val(Substr(x,N-g+1,1))-1))+z
*!*                   i=9
*!*                   m=x
*!*                endif
        ENDIF
    endif
        ?Transform(x)
Next

图片附件: 游客没有浏览图片的权限,请 登录注册


真的想不出来..有大侠能帮帮忙么。

2013-06-14 18:13
qq402716710
Rank: 1
等 级:新手上路
帖 子:91
专家分:0
注 册:2013-1-14
收藏
得分:0 
就是类似于999999
         999998

         000001
这样
2013-06-14 18:41
qq402716710
Rank: 1
等 级:新手上路
帖 子:91
专家分:0
注 册:2013-1-14
收藏
得分:0 
回复 4楼 sdta
这个用途是能够使N为任何数都可以,而且不会运算太长时间,算出一个就出一个,不是所有一起出来,你这个也是一起算才出来的,这样会N的数值大了的话,程序就会非常慢都没数值出来了。
2013-06-15 09:01
qq402716710
Rank: 1
等 级:新手上路
帖 子:91
专家分:0
注 册:2013-1-14
收藏
得分:0 
以下是引用sdta在2013-6-14 19:44:54的发言:

CLEAR
INPUT [输入一个正整数:] TO N
CSTR=[]
FOR M=INT(VAL(REPLICATE([9],N))) TO 0 STEP -1
    CSTR=CSTR+PADL(M,N,[0])+IIF(M>0,CHR(13)+CHR(10),[])
ENDFOR
STRTOFILE(CSTR,[AA.TXT])
MODIFY FILE AA.TXT
不然我都不用字符串来串起来了,这个是为了使N不会溢出来设计的。
2013-06-15 09:09
qq402716710
Rank: 1
等 级:新手上路
帖 子:91
专家分:0
注 册:2013-1-14
收藏
得分:0 
以下是引用sdta在2013-6-15 09:20:59的发言:

要会变通CLEAR
INPUT [输入一个正整数:] TO N
*!*    STRTOFILE([],[AA.TXT])
*!*    CSTR=[]
FOR M=INT(VAL(REPLICATE([9],N))) TO 0 STEP -1
*!*        CSTR=CSTR+PADL(M,N,[0])+IIF(M>0,CHR(13)+CHR(10),[])
    ?M
ENDFOR
*!*    STRTOFILE(CSTR,[AA.TXT])
*!*    MODIFY FILE AA.TXT
这种造成一个问题了,在长字符串转换成数值的时候,是不能完整转换的,不信你试试N=100
如果这样就太简单了
2013-06-15 09:50
qq402716710
Rank: 1
等 级:新手上路
帖 子:91
专家分:0
注 册:2013-1-14
收藏
得分:0 
以下是引用sdta在2013-6-15 10:01:58的发言:

你到底想做什么
有人出了这样一个问题考我..但是我想不出来,看看有没有人能帮忙而已,因为我发觉这个也挺有趣的,就想看看论坛有没有人能做出来而已。
这个只能通过字符串组合来实现吧,我试了很多种方法了
2013-06-15 10:08
qq402716710
Rank: 1
等 级:新手上路
帖 子:91
专家分:0
注 册:2013-1-14
收藏
得分:0 
回复 12楼 kiff
厉害..虽然有点地方我看不明白,明天我再慢慢看,原来真的可以实现的..只要找到规律
2013-06-17 00:05
快速回复:关于算法的问题
数据加载中...
 
   



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

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