E l'ultimo quesito della settimana riguarda un
Numero autoreferenziale
Devi trovare un numero intero di 10 cifre, ABCDEFGHIJ tale che:
- A esprima quanti 0 stanno nella rappresentazione decimale del numero
- B esprima quanti 1 stanno nella rappresentazione decimale del numero
- C esprima quanti 2 stanno nella rappresentazione decimale del numero
e così via fino a
- J esprima quanti 9 stanno nella rappresentazione decimale del numero
Esempio :
12220 è costituito da uno 0, tre 2, zero 3, zero 4, ma non è un numero autoreferenziale né di 10 cifre. Sai trovare il numero tu?
Buon divertimento.
6210001000 perchè la somma
6210001000 perchè ha sei "0", due "1", un "2", zero "3", né "4" né "5", un "6", nessun "7", "8" o "9". Penso sia così. E se è cosi non voglio più essere chiamato fuori alla lavagna indegnamente fino alla fine di questo anno. Saluti Walter
Anche io ho trovato che il
Anche io ho trovato che il numero è 6210001000...posto anche un algoritmo in pascal che analizza tutti i numeri di 10 cifre per controllare se sono autoreferenziali o no.
Eccolo:
uses crt;
var
NN: Real;
NS: String;
Vett: array[0..9] of Real;
Error: Integer;
function PrendiPrimaLettera(S: String): String; {Prende la prima cifra del numero convertito in stringa}
var
I,C: Integer;
begin
I:=Length(S);
C:=I-1;
Delete(S,2,C);
PrendiPrimaLettera:=S;
end;
procedure ComponiVettore; {Crea il vettore di 10 elementi che conterrà le 10 cifre del numero}
var
B: Integer;
begin
Str(NN:10:0,NS);
for B:=0 to 9 do
begin
Val(PrendiPrimaLettera(NS),Vett[B],Error);
Delete(NS,1,1);
end;
end;
procedure ScomponiVettore; {Dal vettore che contiene le cifre del numero trova il numero in formato stringa}
var
B: Integer;
A: String;
begin
NS:='';
A:='';
for B:=0 to 9 do
begin
Str(Vett[B],A);
NS:=NS+A;
end;
end;
function ControllaAutoRef(N: Comp): Boolean; {Controlla se il numero è autoreferente, rispondendo True o False}
var I,Y,O: Integer; Vett2: Array[0..9] of Integer;
begin
ComponiVettore;
for I:=0 to 9 do
Vett2[I]:=0;
for I:=0 to 9 do
begin
if Vett[I]=0 then Vett2[0]:=Vett2[0]+1;
if Vett[I]=1 then Vett2[1]:=Vett2[1]+1;
if Vett[I]=2 then Vett2[2]:=Vett2[2]+1;
if Vett[I]=3 then Vett2[3]:=Vett2[3]+1;
if Vett[I]=4 then Vett2[4]:=Vett2[4]+1;
if Vett[I]=5 then Vett2[5]:=Vett2[5]+1;
if Vett[I]=6 then Vett2[6]:=Vett2[6]+1;
if Vett[I]=7 then Vett2[7]:=Vett2[7]+1;
if Vett[I]=8 then Vett2[8]:=Vett2[8]+1;
if Vett[I]=9 then Vett2[9]:=Vett2[9]+1;
end;
Y:=0;
for I:=0 to 9 do
if Vett[I]=Vett2[I] then Y:=Y+1;
if Y=10 then ControllaAutoRef:= True else ControllaAutoRef:=False;
end;
function BooleanToStr(V: Boolean): String; {Converte il risultato da Boolean a una stringa}
begin
if V = True then BooleanToStr:='True' else BooleanToStr:='False';
end;
var
A: LongInt;
F: Text;
W: String;
{Inizia l'algoritmo principale; Crea il file C:\num.txt, dove inserisce ogni numero che analizza e accanto
il risultato della funzione ControllaAutoRef. Controlla tutti i numeri di 10 cifre}
begin
Assign(F, 'C:\num.txt');
ReWrite(F);
WriteLn(F,' ');
NN:=1000000000.0;
for A:=0 to 899999999 do
begin
Str(NN:10:0,NS);
ComponiVettore;
WriteLn(NN:10:0);
begin
Str(NN,NS);
ControllaAutoRef(NN);
Str(NN:10:0,W);
WriteLn(F,W+ ' ' + BooleanToStr(ControllaAutoRef(NN)));
NN:=NN+1;
end;
end;
end.
Ho provato a compilarlo con Free Pascal e Turbo Pascal 7...con alcuni compilatori potrebbe dare problemi (e fermarsi al numero 3147483647 durante l'esecuzione del programma) per un problema di definizione del tipo numerico LongInt che per qualche compilatore è definito solo nell'intervallo [-2147483648;+2147483647]
Arrivederci, Alessio Marta
Buongiorno Prof,
sono Benedetta di 3H (con l'account di mio fartello perchè non riesco a creare il mio).
Ho provato a rispondere:
6210001000
Arrivederci Benedetta