回 帖 发 新 帖 刷新版面

主题:[活动]卡普雷卡尔常数

【问题描述】卡普雷卡尔常数。任意写一个数字不全一样的四位数N,先把这个四位数的各位数字按从大到小的顺序组成一个新的四位数,然后减去这些数字由小到大组成的四位数得到差,再把差按上面的方法处理,经有限次运算,最后的结果总是6174,所以6174是一个有趣的数,它叫做卡普雷卡尔常数。编程验证四位数N要经过几次这样的运算才能得到卡普雷卡尔常数。例如,输入1234
第一步:4321-1234=3087
第二步:8730-3078=5652
第三步:6552-2556=3996
第四步:9963-3699=6264
第五步:6642-2466=4176
第六步:7641-1467=6174
一共经过6步运算得到卡普雷卡尔常数6174
【输入文件】
文件名:CPLCACS.IN
文件中只有一个数N,而且1000≤N≤9999。
【输出文件】
文件名:CPLCACS.OUT
文件中也只有一个数,表示经过几次运算,得到卡普雷卡尔常数。
【输入样例】
1234
【输出样例】
6

回复列表 (共4个回复)

沙发

cls
do
1 input "m,=“;m
loop until m>1000 and m<9999
for i=1 to 4
a=m mod 10
b= m /10
if c=b then goto 1
c=b
next i 
思考中...
”“”“FUNCTION fenjie$ (x%)
if x%=0 then
   fenjie$="0"
   exit function
elseif x%<0 then 
  x%=-x%
  k$="-1"
end if  
j% = 2
DO UNTIL x% <= 1
  IF x% MOD j% = 0 THEN
   x% = x% / j%
   IF k$=""THEN k$=LTRIM$(STR$(j%))ELSE k$=k$+"*"+LTRIM$(STR$(j%))
  ELSE
   j%=nextZS%(j%+1)
  END IF
LOOP
fenjie$ =

板凳

DECLARE SUB Cl (a$, tjto!)
DECLARE SUB Check (a$, flag!)
DEFLNG N
INPUT "N = ", n
a$ = LTRIM$(RTRIM$(STR$(n)))
Check a$, flag
IF flag = 0 THEN PRINT "Data Error!": END
Cl a$, tjto
PRINT "Total = "; LTRIM$(RTRIM$(STR$(tjto)))
END

SUB Check (a$, flag)
IF LEN(a$) <= 3 OR LEN(a$) >= 5 THEN PRINT "Data Error!": END
FOR i = 1 TO LEN(a$) - 1
  FOR j = i + 1 TO LEN(a$)
    IF MID$(a$, i, 1) <> MID$(a$, j, 1) THEN flag = 1: EXIT SUB
NEXT j, i
END SUB

SUB Cl (a$, tjto) STATIC
DIM n(10), just(10) AS INTEGER
FOR i = 1 TO LEN(a$)
  n(i) = VAL(MID$(a$, i, 1))
NEXT i
DO
  Sep = n(1) * 1000 + n(2) * 100 + n(3) * 10 + n(4)
  FOR i = 1 TO 3
    FOR j = i + 1 TO 4
      IF n(i) < n(j) THEN SWAP n(i), n(j)
  NEXT j, i
  a = VAL(LTRIM$(RTRIM$(STR$(n(1)))) + LTRIM$(RTRIM$(STR$(n(2)))) + LTRIM$(RTRIM$(STR$(n(3)))) + LTRIM$(RTRIM$(STR$(n(4)))))
  b$ = LTRIM$(RTRIM$(STR$(n(4)))) + LTRIM$(RTRIM$(STR$(n(3)))) + LTRIM$(RTRIM$(STR$(n(2)))) + LTRIM$(RTRIM$(STR$(n(1))))
  b = VAL(b$)
  IF LEFT$(b$, 1) = "0" THEN
    FOR i = 1 TO LEN(b$)
      just(i) = VAL(MID$(b$, i, 1))
    NEXT i
    FOR j = 2 TO LEN(b$)
      IF just(j) <> 0 THEN SWAP just(1), just(j): GOTO Pass
    NEXT j
Pass: b = just(1) * 1000 + just(2) * 100 + just(3) * 10 + just(4)
  END IF
  y = a - b
  IF y = Sep THEN PRINT : EXIT SUB
  Num$ = LTRIM$(RTRIM$(STR$(y)))
  FOR i = 1 TO LEN(Num$)
    n(i) = VAL(MID$(Num$, i, 1))
  NEXT i
  PRINT LTRIM$(RTRIM$(STR$(a))); "-"; LTRIM$(RTRIM$(STR$(b))); "=";
  PRINT LTRIM$(RTRIM$(STR$(y))): tjto = tjto + 1
LOOP
END SUB

3 楼

CLS
INPUT N
FOR I=1 TO 5:READ A(I):NEXT I:DATA 82962,75933,63954,61974,82962
FOR I=1 TO 5
  IF A(I)=N THEN B(I)=B(I)+1
NEXT I
DO
  T=N:J=0
  DO WHILE T<>0
    J=J+1:C(J)=T MOD 10:T=T\10
  LOOP
  FOR I=1 TO  J-1
    FOR K=I+1 TO J
      IF C(I)>C(K) THEN SWAP C(I),C(K)
    NEXT K
  NEXT I
  S=0:P=0 
  FOR I=1 TO J:S=S*10+C(I):P=P*10+C(J+1-I):NEXT I
  N=P-S:F=0
  PRINT P;"-";S;"=";N
  FOR I=1 TO 5
    IF A(I)=N THENN B(I)=B(I)+1
    IF B(I)=2 THEN F=1
  NEXT I
LOOP UNTIL F=1

4 楼

CLS
INPUT N
FOR I=1 TO 5:READ A(I):NEXT I:DATA 82962,75933,63954,61974,82962
FOR I=1 TO 5
  IF A(I)=N THEN B(I)=B(I)+1
NEXT I
DO
  T=N:J=0
  DO WHILE T<>0
    J=J+1:C(J)=T MOD 10:T=T\10
  LOOP
  FOR I=1 TO  J-1
    FOR K=I+1 TO J
      IF C(I)>C(K) THEN SWAP C(I),C(K)
    NEXT K
  NEXT I
  S=0:P=0 
  FOR I=1 TO J:S=S*10+C(I):P=P*10+C(J+1-I):NEXT I
  N=P-S:F=0
  PRINT P;"-";S;"=";N
  FOR I=1 TO 5
    IF A(I)=N THENN B(I)=B(I)+1
    IF B(I)=2 THEN F=1
  NEXT I
LOOP UNTIL F=1[/quote]

我来回复

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