主题:[活动]卡普雷卡尔常数
905482852
[专家分:380] 发布于 2009-07-15 20:12:00
【问题描述】卡普雷卡尔常数。任意写一个数字不全一样的四位数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个回复)
沙发
FFKK [专家分:1610] 发布于 2009-08-02 17:00:00
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$ =
板凳
gewenbo [专家分:450] 发布于 2009-08-03 15:31:00
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 楼
lingkushizhe [专家分:0] 发布于 2009-08-03 17:20:00
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 楼
Saitor@love.com [专家分:30] 发布于 2009-08-07 13:21:00
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]
我来回复