задача такая :7. Шериф округа Вашингтон принимает участие в переизбрании на следующий срок. Денежные средства на предвыборную кампанию составляют примерно 10000 долларов. Хотя комитет по переизбранию хотел бы провести кампанию во всех пяти избирательных участках округа, ограниченность денежных средств предпи¬сывает действовать по-другому. Приведенная ниже таблица содержит данные о числе избирателей и денежных средствах, необходимых для проведения успешной кампании по каждому избирательному участку. Каждый участок может либо ис¬пользовать все предназначенные деньги, либо вовсе их не использовать. Как сле¬дует распределить денежные средства?
цены участков в коде
выбивает разные результаты,правильный 9200 на дэлфи,что делаю не так?
На делфи :
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls, math, XPMan;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
Button2: TButton;
Button3: TButton;
Memo1: TMemo;
XPManifest1: TXPManifest;
procedure FormCreate(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
w:array[1..5] of integer = (3100,2600,3500,2800,2400);
R:array[1..5] of integer = (3500,2500,4000,3000,2000);
IC:array[1..5] of integer;
i,j,rez,rezd,lud,ludd:integer;
bi,bid:array[1..5] of integer;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
stringgrid1.Cells[0,0]:='i';
stringgrid1.Cells[1,0]:='w';
stringgrid1.Cells[2,0]:='r';
for i:=1 to 5 do begin
stringgrid1.Cells[0,i]:=inttostr(i);
stringgrid1.Cells[1,i]:=inttostr(w[i]);
stringgrid1.Cells[2,i]:=inttostr(r[i]);
end;
end;
procedure bin(ii:integer);
begin
for j:=5 downto 1 do begin
bi[j]:=ii mod 2;
ii:=ii div 2;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
memo1.Clear;
rez:=0;
rezd:=0;
ludd:=0;
fillchar(bid,sizeof(bid),0);
for i:=1 to 32 do begin
bin(i);
rez:=bi[1]*r[1]+bi[2]*r[2]+bi[3]*r[3]+bi[4]*r[4]+bi[5]*r[5];
lud:=w[1]*bi[1]+w[2]*bi[2]+bi[3]*w[3]+bi[4]*w[4]+bi[5]*w[5];
if (rez<=10000)and(lud>ludd) then
begin
rezd:=rez;
bid:=bi;
ludd:=lud;
end;
end;
memo1.Lines.Add(inttostr(ludd));
for i:=1 to 5 do
memo1.Lines.Add(inttostr(bid[i]));
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
application.Terminate;
end;
end.
НА си:
Код:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int w[5] = {3100,2600,3500,2800,2400};
int R[5] = {3500,2500,4000,3000,2000};
int IC[5];
int bi[5];
int bid[5]={0,0,0,0,0};
int ludd=0;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
StringGrid1->Cells[0][0] = 'i';
StringGrid1->Cells[1][0] = 'w';
StringGrid1->Cells[2][0] = 'r';
for (int i=0;i<2;i++)
{
StringGrid1->Cells[0][i+1] = IntToStr(i+1);
StringGrid1->Cells[1][i+1] = IntToStr(w[i]);
StringGrid1->Cells[2][i+1] = IntToStr(R[i]);
}
}
//---------------------------------------------------------------------------
void bin(int ii)
{
for (int j=5;j>0;j--)
{
bi[j] =ii % 2;
ii = ii / 2;
}
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Memo1->Clear();
int rez =0;
int rezd =0;
int ludd =0;
for (int i=0;i<=31;i++)
{
bin(i);
int rez;
int lud;
int rezd=0;
rez=bi[0]*R[0]+bi[1]*R[1]+bi[2]*R[2]+bi[3]*R[3]+bi[4]*R[4];
lud=w[0]*bi[0]+w[1]*bi[1]+bi[2]*w[2]+bi[3]*w[3]+bi[4]*w[4];
if (rez<=10000)(lud>ludd);
{
rezd = rez;
for (int i=0;i<5;i++)
{
bid[i] = bi[i];
}
ludd = lud;
}
}
Memo1->Lines->Add(IntToStr(ludd));
for (int i=0;i<5;i++)
{
Memo1->Lines->Add(IntToStr(bid[i]));
}
}
//---------------------------------------------------------------------------