fork download
  1. program enigmath; (*Essendo E=N+S(N)+S(S(N))...il problema chiede di trovare N=E-[S(N)+S(S(N))...]*)
  2. (*Si noti che la somma massima delle cifre per un numero inferiore a 10^9 è 9x9=81.*)
  3. (*La "somma delle somme" massima è però 79 + 16 + 7 = 102 ottenuta da numeri tipo 799999999, e le decodificazioni di E sono superiori a E-102.*)
  4. Uses Math;
  5. const MAXX=102;
  6. var
  7. Emin, Emax, i, S, K, inizio, val, count : longint;
  8. cod, dec :array[0..1000000] of longint; (*in cod[i] metto la codifica del numero e in dec[i], inizializzato a zero, sommo +1 tutte le volte che trovo*) (*un numero N di cui è la codifica*)
  9.  
  10. function codifica (x:Longint):Longint;
  11. begin
  12. if x < 10 then codifica:=x (* single digit*)
  13. else
  14. begin
  15. S := 0; K:= x;
  16. while K>0 do
  17. begin
  18. S:=S + K mod 10; (*sum of digits*)
  19. K:=K div 10;
  20. end;
  21. codifica:=x + codifica(S);
  22. end;
  23. end;
  24.  
  25. begin
  26. (*assign(input, 'input.txt'); reset(input);
  27.   assign(output, 'output.txt'); rewrite(output);
  28. *)
  29. readln(Emin,Emax);
  30. if Emin<=102 then inizio:=0 (*Quindi, se Emin>=102 parto da Emin-102 , altrimenti parto da zero e salvo la loro codifica*)
  31. else inizio:=Emin-102;
  32. count:=Emax-Emin+1; (*numero di termini da considerare*)
  33. for i:=inizio to count do dec[i]:=0;
  34. for i := inizio to Emax do
  35. begin
  36. val := codifica(i); Writeln(val,' ',' i ',i);
  37. if (Emin <= val) and (val <= Emax) then
  38. begin
  39. cod[val-Emin]:=i;
  40. dec[val-Emin]:=dec[val-Emin]+1;
  41. writeln(cod[val-Emin],' ',dec[val-Emin]);
  42. end;
  43. end;
  44. for i := 0 to count-1 do
  45. begin
  46. if dec[i]= 0 then writeln('IMPOSSIBLE') (*no decodings exist for E*)
  47. else if dec[i]>1 then writeln('AMBIGUOUS') (*multiple possible decodings exist for E*)
  48. else writeln(cod[i]); (*unique decoding of E*)
  49. end;
  50. end.
Success #stdin #stdout 0.01s 5288KB
stdin
105 110
stdout
3  i 3
4  i 4
5  i 5
6  i 6
7  i 7
8  i 8
9  i 9
11  i 10
13  i 11
15  i 12
17  i 13
19  i 14
21  i 15
23  i 16
25  i 17
27  i 18
30  i 19
22  i 20
24  i 21
26  i 22
28  i 23
30  i 24
32  i 25
34  i 26
36  i 27
39  i 28
42  i 29
33  i 30
35  i 31
37  i 32
39  i 33
41  i 34
43  i 35
45  i 36
48  i 37
51  i 38
54  i 39
44  i 40
46  i 41
48  i 42
50  i 43
52  i 44
54  i 45
57  i 46
60  i 47
63  i 48
66  i 49
55  i 50
57  i 51
59  i 52
61  i 53
63  i 54
66  i 55
69  i 56
72  i 57
75  i 58
78  i 59
66  i 60
68  i 61
70  i 62
72  i 63
75  i 64
78  i 65
81  i 66
84  i 67
87  i 68
90  i 69
77  i 70
79  i 71
81  i 72
84  i 73
87  i 74
90  i 75
93  i 76
96  i 77
99  i 78
102  i 79
88  i 80
90  i 81
93  i 82
96  i 83
99  i 84
102  i 85
105  i 86
86 1
108  i 87
87 1
111  i 88
114  i 89
99  i 90
102  i 91
105  i 92
92 2
108  i 93
93 2
111  i 94
114  i 95
117  i 96
120  i 97
123  i 98
126  i 99
101  i 100
103  i 101
105  i 102
102 3
107  i 103
103 1
109  i 104
104 1
111  i 105
113  i 106
115  i 107
117  i 108
120  i 109
112  i 110
AMBIGUOUS
IMPOSSIBLE
103
AMBIGUOUS
104
IMPOSSIBLE