RARJ Dijo
ACERTIJO
Se tienen 1000 pesos en billetes de a 1$
Se conoce que:
1 billete de 1$ = 20 monedas de 5centavos
1 moneda de 5centavos pesa lo mismo que 10 billetes de 1$
Hacer tres pilas que tengan igual peso
¿Cuantos billetes y monedas de 5centavos tienen que haber en cada pila para que estas pesen lo mismo?.
Nota: Pueden cambiar los billetes en monedas de 5centavos o viceversa, tantas veces lo estime conveniente.
En cada pila tiene que haber al menos una unidad de cada tipo.
Yosue dijo
En este Ejercicio, la lógica se me fue para los piés, inicialmente tanteando encontré una solución, pero después dije, “Mejor encontrarlas todas” y realicé una pequeña rutina en Delphi para encontrarlas.
Aquí les publico el codigo utilizado y una imagen. (Los valores encontrados los guardaba en una Base de Datos en Access por ser cómoda)
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, Vcl.StdCtrls, Vcl.Grids,
Vcl.DBGrids, Data.Win.ADODB, Vcl.Mask, Vcl.DBCtrls;
type
TForm1 = class(TForm)
DBGrid1: TDBGrid;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Ex: TEdit;
Ey: TEdit;
Ez: TEdit;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Em: TEdit;
En: TEdit;
Er: TEdit;
Label14: TLabel;
BComenzar: TButton;
BPausar: TButton;
ADOConnection1: TADOConnection;
ADOTable1: TADOTable;
ADOTable2: TADOTable;
DBx: TDBEdit;
DBy: TDBEdit;
DBz: TDBEdit;
DBm: TDBEdit;
DBn: TDBEdit;
DBr: TDBEdit;
DataSource1: TDataSource;
DataSource2: TDataSource;
BGuardar: TButton;
Label15: TLabel;
Filter1: TEdit;
ADOTable1Id: TAutoIncField;
ADOTable1x: TIntegerField;
ADOTable1m: TIntegerField;
ADOTable1y: TIntegerField;
ADOTable1n: TIntegerField;
ADOTable1z: TIntegerField;
ADOTable1r: TIntegerField;
ADOTable1Fin: TIntegerField;
ADOTable2Id: TAutoIncField;
ADOTable2x: TIntegerField;
ADOTable2m: TIntegerField;
ADOTable2y: TIntegerField;
ADOTable2n: TIntegerField;
ADOTable2z: TIntegerField;
ADOTable2r: TIntegerField;
ADOTable2Tabla: TIntegerField;
ADOTable1Solucion: TIntegerField;
Edit1: TDBEdit;
DBEdit1: TDBEdit;
Label16: TLabel;
Label17: TLabel;
procedure FormCreate(Sender: TObject);
procedure DataSource1StateChange(Sender: TObject);
procedure BGuardarClick(Sender: TObject);
procedure Filter1Change(Sender: TObject);
procedure BComenzarClick(Sender: TObject);
procedure BPausarClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
ExecutionCicle : Boolean;
pm, tm : integer;
stk : Boolean;
Contador : Integer;
a,b,c,d,e,f : integer;
vis:boolean;
Terminar :Boolean;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.BComenzarClick(Sender: TObject);
var
m,n,r,x,y,z,ddd : integer;
begin
ExecutionCicle := false;
ADOTable1.Filter := ‘id=’+ Filter1.Text;
ADOTable1.Filtered := true;
//ADOTable1.Active :=true;
stk := true;
Terminar := false;
Filter1.Enabled :=false;
BComenzar.Enabled := false;
pm := 0;
tm:=0;
vis:=false;
//
for m := ADOTable1m.Value to ADOTable1Fin.Value do begin
if stk then a:= ADOTable1n.Value else a:=1;
for n := a to 20000 do begin
if stk then b:= ADOTable1r.Value else b:=1;
for r := b to 20000 do begin
stk :=false;
// Si terminar
pm := (m+n+r) mod 20;
tm := (m+n+r) div 20;
if ((pm=0)and ((m+n+r)<=20000)) then begin
for x := 1 to 1000 do begin
for y := 1 to 1000 do begin
z:= 1000-x-y-tm;
inc(Contador);
if z>0 then begin
if (((10*m+x)=(10*n+y)) and ((10*m+x)=(10*r+z))) then begin
// Si encontró la soluci’on la guarda en la BD
ADOTable2.Insert;
ADOTable2x.Value := x;
ADOTable2m.Value := m;
ADOTable2y.Value := y;
ADOTable2n.Value := n;
ADOTable2z.Value := z;
ADOTable2r.Value := r;
ADOTable2Tabla.Value := StrToInt(Filter1.text);
ADOTable2.Post;
ADOTable1.Edit;
ddd:=(ADOTable1Solucion.Value);
inc(ddd);
ADOTable1Solucion.Value:=ddd;
ADOTable1.Post;
Contador := 1;
vis:=true;
end;
end;
if (Contador mod 1200000000=0) then begin
Contador:=1;
vis:=true;
end;
if (Contador mod 1000=0) then begin
vis:=false;
end;
if vis then begin
Ex.Text:= intToStr(x);
Em.Text:= intToStr(m);
Ey.Text:= intToStr(y);
En.Text:= intToStr(n);
Ez.Text:= intToStr(z);
Er.Text:= intToStr(r);
Application.ProcessMessages;
end;
if Terminar then begin
ADOTable1.Edit;
ADOTable1m.Value := m;
ADOTable1n.Value := n;
ADOTable1r.Value := r;
ADOTable1.Post;
Exit;
end;
end; {form y}
if Terminar then Exit;
end; {form x}
end; {if}
if Terminar then Exit;
end;{form r}
if Terminar then Exit;
end;{form n}
if Terminar then Exit;
end;{form m}
ShowMessage(‘Se acabo’);
end;
procedure TForm1.BGuardarClick(Sender: TObject);
begin
ADOTable1.Post;
BGuardar.Enabled:=false;
end;
procedure TForm1.BPausarClick(Sender: TObject);
begin
Filter1.Enabled:=true;
BComenzar.Enabled := true;
stk := true;
Terminar := true;
end;
procedure TForm1.DataSource1StateChange(Sender: TObject);
begin
if DataSource1.State=dsEdit then BGuardar.Enabled:=true;
end;
procedure TForm1.Filter1Change(Sender: TObject);
begin
if Filter1.Text<>” then Form1.FormCreate(Sender);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ExecutionCicle := false;
ADOTable1.Filter := ‘id=’+ Filter1.Text;
ADOTable1.Filtered := true;
//ADOTable1.Active :=true;
stk := true;
Terminar := false;
end;
end.




Deja un comentario