[ mensi88 @ 15.12.2012. 15:34 ] @
Zadatak glasi:
Napisati program koji za dati unešeni niz cijelih brojeva X, dužine N, treba da odredi najveću dužinu podniza uzastopnih brojeva koji su parni. Treba štampati dužinu tog podniza i sam podniz.
Evo code-a:
Code:
#include <stdio.h>
#include <stdlib.h>
#define max 50

int main()
{
int i,j=0,ind1=0,N,X[max],Pom[max],maximum,ind2=0;
printf("Unesi duzinu niza: ");
scanf("%d",&N);
if(N>max){
printf("Broj elemenata ne smije biti veci od 50!");
exit(1);
}
printf("Unesi elemente niza: ");
for(i=0;i<N;i++){
scanf("%d",&X[i]);
}
for(i=0;i<N;i++){        /* Nalazi pozicije neparnih elemenata */
if(((X[i])%2)!=0){
Pom[j]=i;
j++;
ind1++;
}
}
maximum=Pom[0];           /* Nalazi duzina podniza */
for(i=1;i<ind1;i++){
if(Pom[i]-Pom[i-1]-1>maximum){
maximum=Pom[i]-Pom[i-1]-1;
}
}
for(i=Pom[ind1-1];i<N;i++){
ind2++;
}
if(ind2<=maximum){
printf("Najduzi podniz uzastopnih brojeva koji su parni ima duzinu %d\n",maximum);
}
else
printf("Najduzi podniz uzastopnih brojeva koji su parni ima duzinu %d\n",ind2-1);
}


Code sam testirao i funkcionise.
Pitanje je kako da ga modifikujem da mi stampa i podniz? Svaka pomoc je dobrodosla.
Pozdrav
[ Nedeljko @ 16.12.2012. 02:59 ] @
Code (c):

#include <stdio.h>
#include <stdlib.h>
#define max 50

int main()
{
     int i, j = 0, ind1 = 0, N, X[max], Pom[max], maximum, pos, ind2;

     printf("Unesi duzinu niza: ");
     scanf("%d", &N);

     if (N > max) {
          printf("Broj elemenata ne smije biti veci od 50!");
          exit(1);
     }

     printf("Unesi elemente niza: ");

     for (i = 0; i < N; i++) {
          scanf("%d", &X[i]);
     }

     for (i = 0; i < N; i++) {        /* Nalazi pozicije neparnih elemenata */
          if (X[i]%2 != 0) {
               Pom[j] = i;
               j++;
               ind1++;
          }
     }

     maximum = Pom[0];           /* Nalazi duzina podniza */
     pos = 0;

     for (i = 1; i < ind1; i++) {
          if (Pom[i] - Pom[i-1] - 1 > maximum) {
               maximum = Pom[i]-Pom[i - 1] - 1;
               pos = Pom[i - 1] + 1;
          }
     }

     ind2 = N - Pom[ind1 - 1] - 1;

     if (ind2 > maximum) {
          maximum = ind2;
          pos = Pom[ind1 - 1] + 1;
     }

     printf("Najduzi podniz uzastopnih brojeva koji su parni ima duzinu %d i elementi su:\n", maximum);

     for (i = pos; i < pos + maximum; ++i) {
          printf("%d\n", X[i]);
     }

     return 0;
}
 

Dakle, pamti prilikom nalaženja trenutnog maksimuma sve što je potrebno za njegovo štampanje. Ovde je to još pozicija.

Može i ovako (bez pomoćnog niza):

Code (c):

#include <stdio.h>
#include <stdlib.h>
#define max 50

int main()
{
     int i, j = 0, N, X[max], maximum = 0, pos = 0;

     printf("Unesi duzinu niza: ");
     scanf("%d", &N);

     if (N > max) {
          printf("Broj elemenata ne smije biti veci od 50!");
          exit(1);
     }

     printf("Unesi elemente niza: ");

     for (i = 0; i < N; i++) {
          scanf("%d", &X[i]);
     }

     for (i = 0; i <= N; ++i) {
          if (i == N || X[i]%2 == 1) {
               if (j > maximum) {
                    maximum = j;
                    pos = i;
               }

               j = 0;
          } else {
               ++j;
          }
     }

     printf("Najduzi podniz uzastopnih brojeva koji su parni ima duzinu %d i elementi su:\n", maximum);

     for (i = pos - maximum; i < pos; ++i) {
          printf("%d\n", X[i]);
     }

     return 0;
}
 
[ mensi88 @ 16.12.2012. 13:09 ] @
Hvala puno Nedeljko!
Pozdrav