Combien de numéros entiers sont entre 1000 et 9999 qui suit ces conditions (indépendants entre eux): 1. La somme de ses chiffres est exactement 9. 2. La somme de ses chiffres est exactement neuf et tous sont différents de 0. 3. Pour être impair et a tous les chiffres differents. 4. Tout de ses chiffres est 9.
J'explique le 1 et le 4: 4: il existe uniquement le nombre 9999.=>1 1: On forme les naturels dont la somme des chiffres est 9: commençant par 1 : 1008,1017,1026,1035,1044,...,1080 soit 9 nombres 1107,1116,1125,1134,...1170 soit 8 nombres 1206,1215,1224,...,1260 soit 7 nombres 1305,...1350 soit 6 nombres 1404,...1440 soit 5 nombres 1503,...1530 soit 4 nombres 1602,1611,1620 soit 3 nombres 1701,1710 soit 2 nombres 1800 soit 1 nombres au total : 9+8+..+1=(9+1)*9/2=45 commençant par 2 : 2007,2016,...,2070 soit 8 nombres 21xx : 7 nombres au total: 8+7+6+...+1=(8+1)*8/2=36 commençant par 2 : =>28 ... Au final 45+36+28+21+15+10+6+3+1=165 En réalité, j'ai écrit un programme: CONST Faux = 0 = 1 CONST Vrai = NOT (Faux) CONST b1 = 1000 CONST b2 = 9999
DIM i AS INTEGER, j AS INTEGER DIM nb(4) AS LONG, t(4) AS INTEGER FOR i = 1 TO n: nb(i) = 0: NEXT i FOR i = b1 TO b2 CALL Test(i, t()) FOR j = 1 TO 4 IF t(j) THEN nb(j) = nb(j) + 1 NEXT j NEXT i FOR i = 1 TO 4: PRINT nb(i),: NEXT i PRINT END
FUNCTION Test_1% (p AS STRING) DIM ret AS INTEGER, i AS INTEGER, s AS INTEGER, x AS INTEGER ret = Faux s = 0 FOR i = 1 TO LEN(p) x = VAL(MID$(p, i, 1)) s = s + x NEXT i IF s = 9 THEN ret = Vrai Test_1% = ret END FUNCTION
FUNCTION Diff% (p AS STRING) DIM c(9) AS INTEGER, i AS INTEGER, x AS INTEGER, ret AS INTEGER ret = Vrai FOR i = 1 TO 9: c(i) = 0: NEXT i FOR i = 1 TO LEN(p) x = VAL(MID$(p, i, 1)) c(x) = c(x) + 1 IF c(x) > 1 THEN ret = Faux EXIT FOR END IF NEXT i Diff% = ret END FUNCTION
FUNCTION Test_2% (p AS STRING, p1 AS INTEGER) DIM ret AS INTEGER ret = Faux IF p1 THEN IF Diff%(p) THEN ret = Vrai END IF Test_2% = ret END FUNCTION
FUNCTION Test_3% (p AS STRING) DIM ret AS INTEGER, x AS INTEGER ret = Faux x = VAL(RIGHT$(p, 1)) IF x MOD 2 = 1 THEN IF Diff%(p) THEN ret = Vrai END IF Test_3% = ret END FUNCTION
FUNCTION Test_4% (p AS STRING) DIM ret AS INTEGER, neuf AS STRING ret = Faux neuf = STRING$(LEN(p), "9") IF p = neuf THEN ret = Vrai Test_4% = ret END FUNCTION
SUB Test (p AS INTEGER, Arr() AS INTEGER) DIM a AS STRING a = LTRIM$(STR$(p)) Arr(1) = Test_1%(a) Arr(2) = Test_2%(a, Arr(1)) Arr(3) = Test_3%(a) Arr(4) = Test_4%(a) END SUB
Lista de comentários
Verified answer
Bonjour,J'explique le 1 et le 4:
4: il existe uniquement le nombre 9999.=>1
1:
On forme les naturels dont la somme des chiffres est 9:
commençant par 1 :
1008,1017,1026,1035,1044,...,1080 soit 9 nombres
1107,1116,1125,1134,...1170 soit 8 nombres
1206,1215,1224,...,1260 soit 7 nombres
1305,...1350 soit 6 nombres
1404,...1440 soit 5 nombres
1503,...1530 soit 4 nombres
1602,1611,1620 soit 3 nombres
1701,1710 soit 2 nombres
1800 soit 1 nombres
au total : 9+8+..+1=(9+1)*9/2=45
commençant par 2 :
2007,2016,...,2070 soit 8 nombres
21xx : 7 nombres
au total: 8+7+6+...+1=(8+1)*8/2=36
commençant par 2 : =>28
...
Au final 45+36+28+21+15+10+6+3+1=165
En réalité, j'ai écrit un programme:
CONST Faux = 0 = 1
CONST Vrai = NOT (Faux)
CONST b1 = 1000
CONST b2 = 9999
DIM i AS INTEGER, j AS INTEGER
DIM nb(4) AS LONG, t(4) AS INTEGER
FOR i = 1 TO n: nb(i) = 0: NEXT i
FOR i = b1 TO b2
CALL Test(i, t())
FOR j = 1 TO 4
IF t(j) THEN nb(j) = nb(j) + 1
NEXT j
NEXT i
FOR i = 1 TO 4: PRINT nb(i),: NEXT i
PRINT
END
FUNCTION Test_1% (p AS STRING)
DIM ret AS INTEGER, i AS INTEGER, s AS INTEGER, x AS INTEGER
ret = Faux
s = 0
FOR i = 1 TO LEN(p)
x = VAL(MID$(p, i, 1))
s = s + x
NEXT i
IF s = 9 THEN ret = Vrai
Test_1% = ret
END FUNCTION
FUNCTION Diff% (p AS STRING)
DIM c(9) AS INTEGER, i AS INTEGER, x AS INTEGER, ret AS INTEGER
ret = Vrai
FOR i = 1 TO 9: c(i) = 0: NEXT i
FOR i = 1 TO LEN(p)
x = VAL(MID$(p, i, 1))
c(x) = c(x) + 1
IF c(x) > 1 THEN
ret = Faux
EXIT FOR
END IF
NEXT i
Diff% = ret
END FUNCTION
FUNCTION Test_2% (p AS STRING, p1 AS INTEGER)
DIM ret AS INTEGER
ret = Faux
IF p1 THEN
IF Diff%(p) THEN ret = Vrai
END IF
Test_2% = ret
END FUNCTION
FUNCTION Test_3% (p AS STRING)
DIM ret AS INTEGER, x AS INTEGER
ret = Faux
x = VAL(RIGHT$(p, 1))
IF x MOD 2 = 1 THEN
IF Diff%(p) THEN ret = Vrai
END IF
Test_3% = ret
END FUNCTION
FUNCTION Test_4% (p AS STRING)
DIM ret AS INTEGER, neuf AS STRING
ret = Faux
neuf = STRING$(LEN(p), "9")
IF p = neuf THEN ret = Vrai
Test_4% = ret
END FUNCTION
SUB Test (p AS INTEGER, Arr() AS INTEGER)
DIM a AS STRING
a = LTRIM$(STR$(p))
Arr(1) = Test_1%(a)
Arr(2) = Test_2%(a, Arr(1))
Arr(3) = Test_3%(a)
Arr(4) = Test_4%(a)
END SUB