Respuestas para Pensar

Un complemento para el Blog del querido profesor Nestor del Prado en Cubadebate

  • Inicio
  • Explicaciones y Respuestas
  • Retos y Soluciones
  • ¿Cómo lo hice?
  • Programadores
  • Curiosidades
  • Acerca de

Código para descifrar el acertijo de RARJ Billetes y Centavos

24 julio, 2019 by yosue1970 Leave a Comment

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.

Filed Under: Programadores

Deja un comentario Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Últimas Entradas

  • Respuesta Números Malvados y Odiosos. 26 septiembre, 2019
  • Función recursiva para obtener números capicúas 3 septiembre, 2019
  • Código Visual Basic (Excel) para descifrar suma de cinco números (diferentes) oblongos que suman 540 19 agosto, 2019
  • Si la suma de cinco números oblongos menores de 300 es igual a 540 ¿Cuáles son esos cinco números? 15 agosto, 2019
  • Halle cinco números oblongos cuya suma sea igual a 99. 12 agosto, 2019

Comentarios

  • yosue1970 en Si la suma de cinco números oblongos menores de 300 es igual a 540 ¿Cuáles son esos cinco números?
  • Nestor del Prado Arza en Si la suma de cinco números oblongos menores de 300 es igual a 540 ¿Cuáles son esos cinco números?
  • yosue1970 en Respuesta a “Ejes rotando y tú calculando; y además completar refranes”
  • cam en Respuesta a “Ejes rotando y tú calculando; y además completar refranes”

Encuestas

¿Cómo es mi sitio?

Ver resultados

Cargando ... Cargando ...

Acceso al Sitio

  • Registrarse
  • Acceder
  • RSS de las entradas
  • RSS de los comentarios
  • WordPress.org
  • Inicio
  • Explicaciones y Respuestas
  • Retos y Soluciones
  • ¿Cómo lo hice?
  • Programadores
  • Curiosidades
  • Acerca de

Copyright © 2019 · Enterprise Pro Theme on Genesis Framework · WordPress · Log in