Перевести код с Паскаля на СИ - C (СИ) (156884)

Узнай цену своей работы

Формулировка задачи:

Попробовал перевести но выдает не те результаты. Не подскажите где ошибка?
Program P1;
Var Map: Array[1..100,1..100] of Integer;
    S,G,F: Array[1..100] of Integer;
    A,I,B,J,N,M,K,L,P,R: Integer;
 
Begin
     Readln(N,M);
     For A:=1 to N do
         For B:=1 to N do
             Map[A,B]:=16000;
 
     For I:=1 to M do
     begin
          Read(L);
          For J:=1 to L do
              Read(S[J]);
          For A:=1 to L do
              For B:=1 to L do
                  Map[S[A],S[B]]:=1;
     End;
 
     For A:=1 to N do
         For B:=1 to N do
             For I:=1 to N do
                 If Map[A,B]>Map[A,I]+Map[I,B] then Map[A,B]:=Map[A,I]+Map[I,B];
 
     Read(K);
     A:=0;
     For I:=1 to K do
     begin
          Readln(G[I],S[I],F[I]);
          A:=A+G[I];
     End;
 
     P:=0;
     R:=P;
     For I:=1 to N do
     begin
          P:=0;
          For J:=1 to K do
          begin
               If I=S[J] then begin P:=P+G[J]; continue; End;
               If Map[I,S[J]]=16000 then begin P:=0; Break; End;
               If (Map[I,S[J]]*4>G[J]) and (F[J]=0) then begin P:=0; Break; End;
               If F[J]=1 then begin P:=P+G[J]; Continue; End;
               P:=P+G[J]-Map[I,S[J]]*4;
          End;
          If P>R then
          begin
               R:=P;
               L:=I;
          End;
     End;
     If R<>0 then Writeln(L,' ',A-R)
     else Writeln(0);
End.
#include <stdio.h>
 
void main()
{
  int map[100][100],s[100],g[100],f[100],a,b,i,j,n,m,k,l,p,r;
  scanf("%d%d",&n,&m);
  for(a=0;a<n;a++)
     for(b=0;b<n;b++)
        map[a][b]=16000;
  for(i=0;i<m;i++)
  {
     scanf("%d",&l);
     for(j=0;j<l;j++)
        scanf("%d",&s[j]);
     for(a=0;a<l;a++)
        for(b=0;b<l;b++)
         map[s[a]][s[b]]=1;
  }
  for(a=0;a<n;a++)
      for(b=0;b<n;b++)
          for(i=0;i<n;i++)
              if(map[a][b]>map[a][i]+map[i][b]) 
                   map[a][b]=map[a][i]+map[i][b];
  scanf("%d",&k);
  a=0;
  for(i=0;i<k;i++)
  {
     scanf("%d%d%d",&g[i],&s[i],&f[i]);
     a+=g[i];
  }
  p=0;
  r=p;
  for(i=0;i<n;i++)
  {
       p=0;
       for(j=0;j<k;j++)
       {
          if(i==s[j]) { p+=g[j]; continue;}
          if(map[i][s[j]]=16000) {p=0; break;}
          if(map[i][s[j]]*4>g[j] && f[j]==0) { p=0; break;}
          if(f[j]=1) { p+=g[j]; continue;}
          p+=g[j]-map[i][s[j]]*4;
          }
        if(p>r) { r=p; l=i;}
  }
  if(r!=0) printf("%d %d",l,a-r);
  else putchar('0');
  system("PAUSE");
}

Решение задачи: «Перевести код с Паскаля на СИ»

textual
Листинг программы
==

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.143 из 5