Перевести код Pascal на C#
Формулировка задачи:
Проблема в том, что при переводе на C# появляется элемент недостижимого кода. Помогите пожалуйста.
Вот Pascal
Вот C#
Пример:
Вход
7
3 4 2 2 1 4 1
Выход
9
Листинг программы
- var
- a : array[1..20] of integer;
- lab : array[1..20] of boolean;
- min,k,n,d : longint;
- procedure dfs(w:integer);
- var
- i,j,d1 : longint;
- k1 : array[1..3] of integer;
- begin
- k1[1]:=w;j:=0;
- for i:=1 to n do
- if not lab[i] then
- inc(j);
- if j<3 then
- begin
- if d<min then min:=d;
- exit;
- end;
- if w=n then
- begin
- k1[2]:=1;
- k1[3]:=2;
- end;
- if w=n-1 then
- begin
- k1[2]:=n;
- k1[3]:=1;
- end
- else
- begin
- k1[2]:=w+1;
- k1[3]:=w+2;
- end;
- if (not lab[k1[1]]) and (not lab[k1[2]]) and (not lab[k1[3]]) then
- begin
- d1:=0;
- for i:=1 to 3 do
- lab[k1[i]]:=true;
- for i:=1 to n do
- if not lab[i] then d1:=d1+a[i];
- d:=d+d1;
- if w<n then i:=w+1 else i:=1;
- while true do
- begin
- if w=i then
- begin
- if d<min then min:=d;
- exit;
- end;
- if not lab[i] then dfs(i);
- if i<n then inc(i) else i:=1;
- end;
- d:=d-d1;
- for i:=1 to 3 do
- lab[k1[i]]:=false;
- end;
- end;
- begin
- min:=maxlongint;
- readln(n);
- for k:=1 to n do read(a[k]);
- for k:=1 to n do
- begin
- d:=0;
- fillchar(lab,sizeof(lab),False);
- dfs(k);
- end;
- writeln(min);
- end.
Листинг программы
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace _1152
- {
- class Program
- {
- static bool[] lab = new bool[30];
- static int i;
- static int min, k, n, d;
- static int [] a = new int[30];
- static void Main(string[] args)
- {
- //int [] a = new int[30];
- min = 100000000;
- n = int.Parse(Console.ReadLine());
- for (k = 1; k <= n; k++)
- a[k] = int.Parse(Console.ReadLine());
- for (k = 0; k < n; k++)
- {
- d = 0;
- //for (i = 1; i <= 21; i++)
- // lab[i] = false;
- dfs(k);
- }
- Console.WriteLine(min);
- Console.ReadKey();
- }
- public static void dfs(int w)
- {
- int i, j, d1;
- int [] k1 = new int [3];
- k1[0] = w;
- j = 0;
- for(i = 0; i < n; i++)
- if (!lab[i]) j++;
- if (j < 3)
- {
- if (d < min) min=d;
- Console.WriteLine(0);
- Console.ReadKey();
- //Environment.Exit(1);
- }
- if (w == n)
- {
- k1[1] = 1;
- k1[2] = 2;
- }
- if (w == n - 1)
- {
- k1[1] = n;
- k1[2] = 1;
- }
- else
- {
- k1[1] = w + 1;
- k1[2] = w + 2;
- }
- if ((!lab[k1[0]]) && (!lab[k1[1]]) && (!lab[k1[2]]))
- {
- d1 = 0;
- for(i = 0; i < 3; i++)
- lab[k1[i]] = true;
- for(i = 0; i < n; i++)
- if (!lab[i]) d1 = d1 + a[i];
- d = d + d1;
- if (w < n) i = w + 1;
- else i = 1;
- while (true)
- {
- if (w == i)
- {
- if (d < min) min = d;
- Console.WriteLine(0);
- Console.ReadKey();
- //Environment.Exit(1);
- }
- if (!lab[i]) dfs(i);
- if (i < n) i++;
- else i = 1;
- }
- d = d - d1; // вот здесь код недостижим
- for(i = 0; i < 3; i++)
- lab[k1[i]] = false;
- }
- }
- }
- }
Решение задачи: «Перевести код Pascal на C#»
textual
Листинг программы
- break
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д