• Важно
    Имате проблем со најава или регистрација на it.mk?
    Побарајте го решението на вашиот проблем ТУКА!

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

''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.
 

''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 (нула)
 

Нови мислења

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

Статистика

Теми
42.984
Мислења
890.299
Членови
31.719
Огласи
222
Најнов член
Cicoblageeeeee
На врв Дно