Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> переделать Код с Delphi на С# 
:(
    Опции темы
liiy2008
Дата 18.6.2012, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 18.6.2012

Репутация: нет
Всего: нет



есть N камней с массами W1, W2 , … WN. Требуется разложить камни на 2 кучки так, чтобы разница масс этих кучек была минимальной.-сама задача
вот сам код:
Код Delphi
program Project2;
{$APPTYPE CONSOLE}
uses
Windows, SysUtils;

Type
MyMass = Array[1..18] Of Integer;
Var
id : DWord;
i,j,m,c,n : Integer;
SumW,Razn : Integer;

W,ResW : MyMass;

f : TextFile;

//****************************************
//Нахождение суммы части элементов массива mas
//максимально приближенной к значению Znach
//razm-размер массива
//На выход функции передаётся найденное значение
//а в массиве Res - элементы, дающие эту сумму
Function FindSumInMass(VAR mas,Res:MyMass;razm,Znach:Integer):Integer;
var
i,j,k : Integer;
Temp,Temp1 : MyMass;
Begin
For i:=1 To 18 Do Res[i]:=0;
Result:=0;

If razm=1 Then //Для одного элемента
Begin
Result:=mas[1];
Res[1]:=mas[1];
Exit;
End;

If razm=2 Then //Для двух элементов
Begin
i:=Abs(mas[1]-Znach);
j:=Abs(mas[2]-Znach);
k:=Abs(mas[1]+mas[2]-Znach);

If i>j Then
If j<k Then
Begin
Result:=mas[2];
Res[1]:=mas[2];
Exit;
End Else
Begin
Result:=mas[1]+mas[2];
Res[1]:=mas[1];
Res[2]:=mas[2];
Exit;
End Else
If i<k Then
Begin
Result:=mas[1];
Res[1]:=mas[1];
Exit;
End Else
Begin
Result:=mas[1]+mas[2];
Res[1]:=mas[1];
Res[2]:=mas[2];
Exit;
End;
End;

For i:=1 To razm Do
Begin
For j:=1 To razm-1 Do
If j>=i Then Temp[j]:=mas[Succ(j)] Else
Temp[j]:=mas[j];

If mas[i]<Znach Then
Begin
k:=Znach-mas[i];
If k=0 Then
Begin
Result:=mas[i];
For j:=1 To 18 Do Res[j]:=0;
Res[1]:=mas[i];
Exit;
End;
k:=FindSumInMass(Temp,Temp1,razm-1,k);
If Abs(Result-Znach)>Abs((k+mas[i])-Znach) Then
Begin
Result:=k+mas[i];
Res[1]:=mas[i];
For j:=1 To razm-1 Do
Res[Succ(j)]:=Temp1[j];
End;
End Else
If Abs(Result-Znach)>(mas[i]-Znach) Then
Begin
Result:=mas[i];
Res[1]:=mas[i];
End;
// If (Odd(SumM) And (Abs(Result-Znach)=1)) Then Exit;
End;
End; {FindSumInMass}

Begin
//Инициализируем для выдачи русского текста на экране
SetConsoleCP(1251);
SetConsoleOutPutCP(1251);

AssignFile(f,'input.txt');
Reset(f);

ReadLn(f,n); //Количество камней

If ((n<1) Or (n>18)) Then
Begin
CloseFile(f);
AssignFile(f,'output.txt');
Rewrite(f);
WriteLn(f,'Не соответствует количество камней!');
CloseFile(f);
Exit;
End;

SumW:=0; //Общая сумма веса всех камней
For i:=1 To n Do
Begin
Read(f,W[i]);
If ((W[i]<1) Or (W[i]>105)) Then
Begin
CloseFile(f);
AssignFile(f,'output.txt');
Rewrite(f);
WriteLn(f,'Не соответствует вес камней!');
CloseFile(f);
Exit;
End;
SumW:=SumW+W[i]; //Накопить общую сумму
End;

CloseFile(f);
AssignFile(f,'output.txt');
Rewrite(f);

WriteLn;
WriteLn('Выполняется обработка - ожидайте...');
id:=GetTickCount; //Запомним время начала выполнения


//Раскладываем камни...

c:=FindSumInMass(W,ResW,n,SumW Div 2);

//Выдача на экран массивов двух куч камней...
WriteLn;
WriteLn('Задание выполнено!');
WriteLn('Результаты раскладки :');
m:=0;
For i:=1 To n Do
Begin
For j:=1 To n Do
If W[j]=ResW[i] Then
Begin W[j]:=0; Break; End;

Write(ResW[i],' ');
Inc(m,ResW[i]);
If m=c Then Break;
End;
WriteLn;
//Вторая куча
For i:=1
 smile нужно только сделать на С# а у меня знаний о нем "0"
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0431 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.