Pereiti prie turinio

Programa C kalba


Rekomenduojami pranešimai

Sveiki,

 

turiu problemėlę, niekaip nepavyksta išspręsti šio uždavinio:

 

Duotas sveikų skaičių masyvas, kuriame skaičiai gali kartotis. Sukurti kitą masyvą į kurį pakliūna tik pasikartojantys skaičiai.

 

Pvz.:

 

Sukuriame masyvą kurio elementu reikšmės yra: 1 1 1 2 2 3 2 4

Į naują masyvą turėtų pakliūti šios reikšmes(taip pat turetu but atspausdintos): 1 2.

 

Čia mano bandytas rašyti kodas ( "nedadarytas" aišku ):

Kodas:

#include<stdio.h>
#include<stdlib.h>

int main(){
   int i,j,d,n,p;
   int s[100],m[100];
   printf("Iveskite elementu kieki \n");
   scanf("%d",&n);
   for(i=1;i<=n;i++){
                     printf("Iveskite %d-aja elemento reiksme \n",i);
                     scanf("%d",&m[i]);
                     }
   printf("Sudarytas masyvas: \n");   
   for(i=1;i<=n;i++){
                     printf("%d \n",m[i]);
                     }
   printf("Masyvas kuriame yra tik pasikartojantys elementai: \n");
   d=0;
   p=0;
   for(i=1;i<=n;i++){
                     d++;
                     for(j=1+d;j<=n;j++){
                                       if(m[i]==m[j]){           
                                          s[i]=m[i];
                                          p++;
                                                      } 
                                                      }
                                                      }
   for(i=1;i<=p;i++){
                     printf("%d \n",s[i]);
                     }
   system("pause");
   return 0;
}

 

Problema tame, kad kai sukuriu masyvą kuriame yra daugiau nei 2 kartus pasikartojančios tos pačios reikšmės man spausdina nesąmones.

 

Nežinau kaip turėtų atrodyt algoritmas, kad spausdintų pasikartojančias reikšmes po vieną kartą.

 

Tikriausiai per daug sudėtingai galvoju...

 

Būtų malonu jei kas nors atvestų į teisingą kelią. :huh:

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Pabandžiau prisiminti - turėtų veikti ;)

 

int masyvas[] = {1,2,4,-3,-6,-7,-3,3,-3,4,5,6,6,7,6};

/* http://www.cplusplus.com/reference/clibrary/cstdlib/qsort/ */
int compare_int(const void * a, const void * b)
{
     return ( *(int*)a - *(int*)b );
}

int main() {
   int i;
   int masyvo_ilgis;
   int int_ilgis = sizeof(int);
   int paskutinis_vienodas;

   /* sortinam int tipo elementus, naudojant stdlib qsort */
   masyvo_ilgis = sizeof(masyvas)/sizeof(int_ilgis);
   qsort(masyvas, masyvo_ilgis, sizeof(int_ilgis), compare_int);

   for(i=0; i<masyvo_ilgis; i++) {
       /* jei nepaskutinis elementas */
       if(i != masyvo_ilgis - 1) {
           /* jei du is eiles elementai vienodi ir neatspausdintas */
           if(masyvas[i] == masyvas[i+1] && masyvas[i] != paskutinis_vienodas) {
               printf("%d ", masyvas[i]);
               paskutinis_vienodas = masyvas[i];
           }
       }
   }
}

Nuoroda į pranešimą
Dalintis kituose puslapiuose

na, man neatrodo sudėtinga. Susidedi skaičius į masyvą, poto eini per jį ir tikrini ar einamasis elementas jau yra masyve, jei taip, įdedi į naują masyvą, prieš tai patikrindamas ar naujame masyve jo jau nėra :huh:

Na, visa tai aš padariau, net gi išveda skaičius, kurie kartojasi. Bet kažkodėl neišeina išvesti kiek yra tokių skaičių, jų kieki...

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...