[1] Concurs - Puncte maxime

[1] Concurs - Puncte maxime

Postby Mihai » 01 Feb 2010, 17:23

Puncte maxime

Fie L o lista de numere cu n componente numere naturale, notate de la L[1] la L[n]. Spunem ca un anumit numar este punct maxim daca este mai mare decat suma numerelor aflate in lista inaintea sa:
L[X] - punct maxim <=> L[1]+L[2]+...+L[X-1]<L[X]
Sa se afiseze toate numerele care sunt puncte maxime din vector.

Date de intrare
Se citeste n de la tastatura, urmat de n numere.

Date de iesire
Se afiseaza pe ecran toate punctele maxime.

Exemplu
n: 6
Cele n numere: 3 2 4 10 15 31
Punctele maxime: 3 10

Observatii:

Primul punct este considerat intotdeauna un punct maxim.
0<n<=10.000
0<=L[x]<232 pentru orice x de la 1 la n


Durata:

1-6 Februarie - inscrierea in concurs
7 Februarie - declararea castigatorului
0,0p / 0 votes
User avatar
Mihai
Byte
 
Joined: 29 Dec 2009
Status: 25

Re: [1] Concurs - Puncte maxime

Postby Ciresel » 01 Feb 2010, 18:15

Particip :P (programul in attachment)
1p / 1 votes
Attachments
maxim_ciresel.zip
(155.62 KiB) Downloaded 34 times
User avatar
Ciresel
Bit
 
Joined: 01 Feb 2010
Status: 5

Re: [1] Concurs - Puncte maxime

Postby DarkByte » 02 Feb 2010, 11:10

Care e numarul maxim de numere din sir ? Care e valoarea maxima a fiecarui numar ?

L.E. participarea mea la concurs: - in atasament.
1p / 1 votes
Attachments
maxim_darkbyte.zip
(11.07 KiB) Downloaded 31 times
User avatar
DarkByte
11011011
 
Joined: 29 Dec 2009
Status: 136

Re: [1] Concurs - Puncte maxime

Postby Mihai » 02 Feb 2010, 12:19

^
Merci de atentionare, am editat. Ii rog pe cei care mi-au trimis deja sursele sa le modifice pentru a se putea incadra in limitele propuse, sa mi le retrimita si sa posteze si noul executabil (daca este cazul).
0,0p / 0 votes
User avatar
Mihai
Byte
 
Joined: 29 Dec 2009
Status: 25

Re: [1] Concurs - Puncte maxime

Postby DarkByte » 02 Feb 2010, 12:42

Am refacut si retrimis :)
0,0p / 0 votes
User avatar
DarkByte
11011011
 
Joined: 29 Dec 2009
Status: 136

Re: [1] Concurs - Puncte maxime

Postby v0id » 06 Feb 2010, 02:44

Hop si eu: in atasament.
Intotdeauna cu GUI :)
3p / 1 votes
Attachments
maxim_v0id.zip
(276.94 KiB) Downloaded 36 times
A good coder is never on holiday - he may be working on a different machine, that's about as far as it gets.
User avatar
v0id
Word
 
Joined: 05 Jan 2010
Location: 127.0.0.1
Status: 39.5

Re: [1] Concurs - Puncte maxime

Postby Mihai » 23 Feb 2010, 06:07

A venit si ziua jurizarii >:).

v0id - programul este foarte bine facut, inclusiv pe partea de verificare a inputului;
DarkByte - de asemenea, un program bine scris;
Ciresel - se pare ca nu ai mai apucat sa modifici dupa ce am adaugat si limitele (imi asum vina pentru asta, pentru ca nu le-am publicat de la inceput). Totusi, problema majora la programul tau este complexitatea mare: n2.

Castigatorul este v0id. Sursele programelor inscrise in concurs:

v0id:

  1. unit frmMain;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7.   Dialogs, StdCtrls;
  8.  
  9. type
  10.   TForm1 = class(TForm)
  11.     memNumbers: TMemo;
  12.     btnGetMax: TButton;
  13.     Label1: TLabel;
  14.     btnSave: TButton;
  15.     btnLoad: TButton;
  16.     dlgLoad: TOpenDialog;
  17.     dlgSave: TSaveDialog;
  18.     procedure btnGetMaxClick(Sender: TObject);
  19.     procedure btnSaveClick(Sender: TObject);
  20.     procedure btnLoadClick(Sender: TObject);
  21.   private
  22.     { Private declarations }
  23.   public
  24.     { Public declarations }
  25.   end;
  26.  
  27. var
  28.   Form1: TForm1;
  29.  
  30. implementation
  31.  
  32. {$R *.dfm}
  33.  
  34. procedure TForm1.btnGetMaxClick(Sender: TObject);
  35. var
  36.   iCounter: integer;
  37.  
  38.   lSum: int64;
  39.   lFinal: string;
  40.  
  41.   lMaxNumbers: integer;
  42.  
  43. const
  44.   MAX_NUMBERS = 10000;
  45. begin
  46.   lSum := 0;
  47.   lFinal := EmptyStr;
  48.  
  49.   try
  50.     // Verificare numar de elemente
  51.     lMaxNumbers := memNumbers.Lines.Count;
  52.     if (lMaxNumbers > MAX_NUMBERS) then
  53.       begin
  54.         lMaxNumbers := MAX_NUMBERS;
  55.         ShowMessage('Lista contine mai mult de ' + IntToStr(MAX_NUMBERS) + ' numere.' + #13#10 +
  56.                     'Numai primele ' + IntToStr(MAX_NUMBERS) + ' numere vor fi considerate.');
  57.       end;
  58.  
  59.     // Iteratie pe lista de numere
  60.     for iCounter := 0 to lMaxNumbers - 1 do
  61.       begin
  62.         try
  63.           // Verificare daca numarul este mai mic decat 2^32
  64.           if (StrToInt64(memNumbers.Lines.Strings[iCounter]) < 1) or
  65.              (StrToInt64(memNumbers.Lines.Strings[iCounter]) > High(Cardinal)) then
  66.             begin
  67.               ShowMessage('Numarul ' + memNumbers.Lines.Strings[iCounter] + ' nu se incadreaza in conditia ' + #13#10 +
  68.                           '"0 < n <= 2^32". Numarul va fi ignorat.');
  69.               Continue;
  70.             end;
  71.         except
  72.           on E: Exception do
  73.             begin
  74.               // Daca am avut o exceptie la conversia in integer, ignoram sirul de caractere
  75.               if E is EConvertError
  76.                 then
  77.                   begin
  78.                      ShowMessage('"' + memNumbers.Lines.Strings[iCounter] + '" nu este un numar natural. Sir de caractere ignorat.');
  79.                      Continue;
  80.                   end
  81.                 else
  82.                   raise;
  83.             end
  84.         end;
  85.  
  86.         // Verificare daca numarul curent trebuie adaugat la rezultatul final
  87.         if (lSum < StrToInt(memNumbers.Lines.Strings[iCounter])) then
  88.           lFinal := lFinal + memNumbers.Lines.Strings[iCounter] + '; ';
  89.  
  90.         // Incrementare suma numere
  91.         Inc(lSum, StrToInt(memNumbers.Lines.Strings[iCounter]));
  92.       end;
  93.  
  94.     // Curatenie la finalul string-ului de afisat
  95.     Delete(lFinal, Length(lFinal) - 1, 2);
  96.  
  97.     // Afisare rezultat
  98.     if (lFinal <> EmptyStr)
  99.       then ShowMessage(lFinal)
  100.       else ShowMessage('Nu s-a gasit nici un numar maxim care sa corespunda conditiilor!')
  101.   except
  102.     on E: Exception do
  103.       ShowMessage('S-a intalnit o exceptie: ' + E.Message);
  104.   end;
  105. end;
  106.  
  107. procedure TForm1.btnLoadClick(Sender: TObject);
  108. begin
  109.   if dlgLoad.Execute then
  110.     memNumbers.Lines.LoadFromFile(dlgLoad.FileName);
  111. end;
  112.  
  113. procedure TForm1.btnSaveClick(Sender: TObject);
  114. begin
  115.   if dlgSave.Execute then
  116.     memNumbers.Lines.SaveToFile(dlgSave.FileName);
  117. end;
  118.  
  119. end.


DarkByte:

  1. uses crt;
  2.  
  3. var sir: array[1..10000] of cardinal;
  4.     N, i: integer;
  5.     max: cardinal;
  6.     corect: Boolean;
  7.  
  8. begin
  9.   corect := True;
  10.   repeat
  11.     clrscr;
  12.     if corect
  13.       then write('Dati N: ')
  14.       else
  15.         begin
  16.           writeln('N invalid ! Reintroduceti o valoare intre 1 si 10000 !');
  17.           write('Dati N: ');
  18.        end;
  19.     readln(N);
  20.     corect := False;
  21.   until (N > 0) and (N < 10001);
  22.  
  23.   for i := 1 to N do
  24.     begin
  25.       write('Dati elementul ', i, ': ');
  26.       readln(sir[i]);
  27.     end;
  28.  
  29.   max := sir[1];
  30.   write(#13#10'Lista numerelor maxime din sirul introdus este: ', max);
  31.  
  32.   for i := 2 to N do
  33.     begin
  34.       if sir[i] > max then
  35.         write(' - ', sir[i]);
  36.       max := max + sir[i];
  37.     end;
  38.  
  39.   writeln(#13#10#13#10, 'Apasa orice tasta pentru a iesi ...');
  40.   readkey;
  41. end.
  42.  


Ciresel:

  1.  
  2. #include<iostream>
  3. #include<cstdio>
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8. int n;
  9. cout<<"dati n=";
  10. cin>>n;
  11. int v[100];
  12. for(int i=0;i<n;i++)
  13.     {
  14.        cin>>v[i];
  15.        cout<<" ";
  16.     }
  17. cout<<"\n"<<v[0]<<" ";
  18. int s;
  19. for(int i=1;i<n;i++)
  20.     {
  21.         s=0;
  22.         for(int j=0;j<i;j++)
  23.         {
  24.             s=s+v[j];
  25.         }
  26.         if(v[i]>s) cout<<v[i]<<" ";
  27.     }
  28. return 0;
  29. }
  30.  


P.S.: v0id, te asteptam maine cu noua tema :D.
0,0p / 0 votes
User avatar
Mihai
Byte
 
Joined: 29 Dec 2009
Status: 25


Return to Concursuri de programare desktop

Who is online

Users browsing this forum: No registered users and 0 guests