回 帖 发 新 帖 刷新版面

主题:[讨论]紧急求助~(答对30分)

题目:
由键盘输入大于10位的自然数,打印出将其各位数字重新排列成的比原数小的最大数
请把程序写出来,尽量通俗易懂一些[em18]

回复列表 (共5个回复)

沙发

这个是要什么算法怎么才能实现?我发现我学了循环结构那章和那章也前的知识无法解决这个问题似的,这个问题包括那些知识点啊?

板凳

把输入的数每个位取出来,放到数组里面,然后再根据这样一种排充格式
s=a*10000000000+b*100000000+c*100000000.....+i;
其中a,b,...i的值是按一定的顺序出来了,这可以设一个(二从循环)排序来实现,然后现用一个条件比判断一下,不就可以出来了吗?

3 楼

1.按道理应该用长整形变量来存数,
  但从题目的要求来看,用字符串来存储变量可以变得很简单.
2.这是非常简单的问题,有很简单的办法

举例:比5468975132465798644489小的最大数是多少?
很简单,把最后的6和4调换位置,后面的再倒序就是了,不是吗?
     得5468975132465798498644

那么程序就简单了:

input a$
a$=rtrim$(ltrim$(a$)) '默认输入的数字不会出错,如果需要判断可以另加判断过程
L=len(a$)
for i=L to 2 step -1
    if mid$(a$,i,1) < mid$(a$,i-1,1) then  '找出不协调位置
       for j=L to i step -1
           if mid$(a$,j,1) < mid$(a$,i-1,1) then  '交换逆序
              b$=mid$(a$,i-1,1)
              mid$(a$,i-1,1)=mid$(a$,j,1)
              mid$(a$,j,1)=b$
              exit for
           endif
       next
       for k=i to (i+L-1)\2   '后半截倒序,以达到最大值
           b$=mid$(a$,k,1)
           mid$(a$,k,1)=mid$(a$,l,1)
           mid$(a$,l,1)=b$
           L=L-1
       next
       exit for
    endif
next
print a$

'试试看结果对不对?
'我都忘了是第几次写这条题了,估计再过几个月还会有人问的.

4 楼

谢谢,

5 楼

没看懂

当然也不懂它有什么意义

我来回复

您尚未登录,请登录后再回复。点此登录或注册