|
[ 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
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|