• Здраво и добредојдовте на форумот на IT.mk.

    Доколку сеуште не сте дел од најголемата заедница на ИТ професионалци и ентузијасти во Македонија, можете бесплатно да се - процесот нема да ви одземе повеќе од 2-3 минути, а за полесна регистрација овозможивме и регистрирање со Facebook и Steam.

[C] Za nekoj daden priroden broj da se najde kolku razlicni cifri ima

  • Ја почнал/а темата
  • #1

''TcM>>

Intern
6 јануари 2008
961
39
Vaka, programava treba da ja izvrsuva slednava funkcija: Za nekoj si daden priroden broj treba da se najde kolku razlicni cifri ima vo toj broj..
Na pr: za brojot: 1425421 - ima 4 razlicni cifri...
Pa eve jas sto pisav i do kade zaglaviv:

Код:
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  int x,i,j,count=0,k,r,m=0,f;
  int niza[100000];
  printf("Vnesi go brojot:");
  scanf("%d", &x);
  k=x;
  
  while (k>0)
  {k=k/10;
  m++;}
      
  for (i=0;i<m+1;i++)
  {      
      r=x%10;
      niza[i]=r;
      if(x<10)
      niza[i]=x;
      x=x/10;      
  }
   
   for (i=m-1;i>=0;i--)
  {
      for (j=m-1;j>=0;j--)
      {
          if(niza[i]==niza[j])
          count++;
         ????<---problem         
      }         
  }          
  printf("%nnd  ", count);  
  printf("n");
    
  system("PAUSE");	
  return 0;
}
Pa ako nekoj moze da mi kaze sto bi trebalo da se vpise vo toj for cilklus (ako do tamu mi e tocna..) :)

(i uste edno glupo prasanje, ali kako da go zamotam tekstot moj kako citat?)
 

HHH

Intern
20 февруари 2008
35
0
TCM, stvarno ne mozam da ja razberam logikata.
Prvo, vneseniot broj x go stavas vo promeliva k, koja sto podocna ja koristis vo while ciklus so cel da vidis kolku sifri ima, odnosno m so inkrementiranjeto pokazuva kolku e cifren brojot.
Ne mozam da go sfatam for ciklusot: se povtoruva do m(odnosno do kolku cifri ima brojot) i so r=x%10 ja dobivame poslednata brojka od vneseniot broj i go stavame vo niza (i taka se povtoruva preposledniot........se dodeka ne stigneme do prviot i go stavame vo nizata).
No zosto ti e komandata if(x<10) niza=x; koga znaeme deka koj i da bilo broj modulo 10 ke rezultira so broj pomal od 10, znaci if statement-ot ti e visok.
Posle zasto dole kaj dvata for ciklusa za odreduvanje na counter-ot, vo uslovot ne stoi
if(niza != niza[j]) bidejki trebase da gi najdes brojkite koi se razlicni vo eden broj.

Ako si ja resil zadacata, aj molim te prati ja bas me kopka resenieto.
po moznost ostavi komentar.
 
  • Ја почнал/а темата
  • #5

''TcM>>

Intern
6 јануари 2008
961
39
Код:
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  int x,i,j,count=0,k,r,m=0,f;
  int niza[100000];
  printf("Vnesi go brojot:");
  scanf("%d", &x);
  k=x;
  //imam 2 promenlivi so ist broj (brojot sto e vnesen), 
  //bidejki ke go koristam vo 2 slucaevi, kade sto na 2-te mesta ke im se menuva vrednosta.
  while (k>0)
  {k=k/10;
  m++;}
  //tuka naogame kolku cifri ima brojot.    
  for (i=0;i<m+1;i++)
  {//go koristime toa tuka, i staiv m+1 zatoa sto ako bese samo m zavrsuva predvreme.      
      r=x%10;
      niza[i]=r;
      if(x<10)
      niza[i]=x;
      //ova if go staiv od pricina na pr. za: 5%10 ne mi davase 5 kako ostatok,,
      //i taka da ako brojot e pomal od 10 pisav da go pamti toj broj.
      //iako ne znam zosto ne mi dava deka na pr: 5%10 e 5 :S
      x=x/10;      
  }
   
   for (i=m-1;i>=0;i--)
  {
      for (j=m-1;j>=0;j--)
      {
          if(niza[i]==niza[j])
          count++;
          //za ovde imav probano i taka, ama dzabe ne e takvo resenieto
          //eve kako moze da se vide kako gi proveruva nizite nizite
          printf("%d-%d t", niza[i], niza[j]);
         ????<---problem         
         //ali inace zadacava seuste ne mi e resena :(
      }         
  }          
  printf("nn%d  ", count);  
  printf("n");
    
  system("PAUSE");	
  return 0;
}
E sea samo ovde nekako ne znam kako da pisam...
Код:
for (i=m-1;i>=0;i--)
  {
      for (j=m-1;j>=0;j--)
      {
          if(niza[i]==niza[j])
          count++;          
      }         
  }
Vaka go postaviv for ciklusot so cel da mi bide polesno za razgleduvanje, odnosno da mi gi cita odnapred a ne odnazad (ako me svakas).. Probaj ja da vidis so toa vmetnto printf sto mi e, i ke vidis kako gi sporeduva broevite, taka da nekoi gi sporeduva so nekoi sto se veke sporedeni i ispaga pogolemi brojki.. E tuka sum zaglaven....
 

Spion

Intern
25 септември 2007
48
4
Код:
#include <stdio.h>

int main()
{
        int cifri[10] = {0,0,0,0,0,0,0,0,0,0};
        int broj, brojcifri = 0;
        scanf("%d",&broj);
        while (broj)
        { 
                if (!cifri[broj%10]) { 
                        ++brojcifri;
                        cifri[broj%10] = 1;
                }
                broj = broj / 10;
        }
        printf("Brojot ima %d razlicni cifrin",brojcifri);
        return 0;
}
 

HHH

Intern
20 февруари 2008
35
0
Ne ja sfakam sintaksata vo if (!cifri[broj%10])
kako bi izgledalo da se napise vo poslozena komanda,
na primer: if(cifri[broj%10) != cifri[broj%10]) ama ne e taka;
kaj while(broj) razbrav deka so komandata broj=broj/10 compilerot ke go prekine ciklusot koga n ke dobie vrednost sto ne e od tipot int;
Iako pojasno e da se napise while(broj>0)
 

pudge

Intern
28 ноември 2007
128
1
mislis vo poprosta varijanta.

sekoe cifri[broj%10] ke bide 0, i koga ke mu udris negacija na nula ke stane 1 , taka if ciklusot ke se izvrsi i potoa vrednosta na cifri[broj%10] ke bide smeneta od 0 vo 1, taka da sledniot pat koa ke proveri ke bide if(!1) , if-ot nema da se izvrsi a so toa i brojacot na razlicni cifri nema da se zgolemi.

kaj while loop-ot kompajlerot nema da go prekine ciklusot , ako dobie decimalna vrenost, bidejki e int, decimalite nema da gi racuna, zanci ako dobri 653.2 , broj ke bide ednakov na 653 bidejki e od tipot int.
 

Spion

Intern
25 септември 2007
48
4
Ne ja sfakam sintaksata vo if (!cifri[broj%10])
kako bi izgledalo da se napise vo poslozena komanda,
if (cifri[broj % 10] == 0)

kaj while(broj) razbrav deka so komandata broj=broj/10 compilerot ke go prekine ciklusot koga n ke dobie vrednost sto ne e od tipot int;
Iako pojasno e da se napise while(broj>0)
не компајлерот, туку самиот процес (програм) ќе го прекине циклусот кога n ќе добие вредност 0 (нула)
 

Нови мислења

Последни Теми

Онлајн членови

Статистика

Теми
43,498
Мислења
821,869
Членови
28,042
Најнов член
Puffy
На врв Дно