Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: Ajutor  (Citit de 4933 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
bcos96
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 2



Vezi Profilul
« : Octombrie 30, 2015, 14:27:35 »

Am o problema in care mi se cere sa verific cate numere cu x cifre au suma y. Am reusit sa fac programul, insa se pierd numerele care incep cu 0.
exemplu: cate nr cu 3 cifre au suma 4. R:15
004, 013, 022, 031, 040, 103, 112, 121, 130, 202, 211, 220, 301, 310, 400.

codul meu in C pana acum:
#include <stdio.h>
#include <math.h>
int main()
{ int a,b,c,x,y;
  scanf("%d",&a);
  scanf("%d",&b);
  int n,t, sum, remainder;
  for(n=pow(10,a-1);n<pow(10,a);n++)
    { t=n;
     sum=0;
  while (t!=0)
    {
      remainder = t%10;
      sum = sum+remainder;
      t=t/10;
    }
  if(sum==b) c=c+1;
   }
 printf("%d\n",c);
  return 0;
}

Ce as putea face sa obtin si numerele cu 0?
Memorat
klamathix
Echipa infoarena
Nu mai tace
*****

Karma: 733
Deconectat Deconectat

Mesaje: 1.216



Vezi Profilul
« Răspunde #1 : Octombrie 30, 2015, 14:44:04 »

Cerința asta e cam ambiguă, de obicei dacă te referi la un număr de X cifre, el nu poate începe cu zerouri aiurea. Dar dacă într-adevăr asta cere, soluția e destul de simplă, începi de la 0, nu de la pow(10, a - 1).
Memorat
bcos96
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 2



Vezi Profilul
« Răspunde #2 : Octombrie 30, 2015, 14:46:47 »

da, dar apoi o sa fie:
0,1,2,3 .... 10**a
si eu cand precizez numarul de cifre(ex: 4), va trebui sa o ia 0000,0001,0002....9999
da ai dreptate...e cam ambigua cerinta
Memorat
TheNechiz
De-al casei
***

Karma: 30
Deconectat Deconectat

Mesaje: 145



Vezi Profilul
« Răspunde #3 : Octombrie 30, 2015, 14:50:04 »

Sincer, eu nu știu niciun număr care să înceapă cu 0. Eh?
Prima cifră a unui număr este mereu diferită de 0, altfel nu e număr.
Totuși, faptul că 4,22,31,40 au suma cifrelor egală cu 4 e adevărat, dar ele nu au 3 cifre.

Ideea ta e bună.  Thumb up
Ai putea să îmbunătățești puțin implementarea dacă nu ai folosi i < pow(a,10). Pentru că funcția pow se apelează la fiecare iterație. Ai putea păstra rezultatul returnat de pow într-o variabilă.

Dacă vrei neapărat să numeri și acele aranjamente de cifre care încep cu 0. Ai putea să numeri de două ori acele numere pe care le generezi și care îl conțin pe 0 printre cifrele lor. De exemplu: 220 = 022 , dacă permutăm cifrele, deci îl numeri de două ori. Poate greșesc, s-ar putea să trebuiască numărat în funcție de numărul de 0-uri, dar ai prins ideea...
Memorat
klamathix
Echipa infoarena
Nu mai tace
*****

Karma: 733
Deconectat Deconectat

Mesaje: 1.216



Vezi Profilul
« Răspunde #4 : Octombrie 30, 2015, 14:53:54 »

da, dar apoi o sa fie:
0,1,2,3 .... 10**a
si eu cand precizez numarul de cifre(ex: 4), va trebui sa o ia 0000,0001,0002....9999
da ai dreptate...e cam ambigua cerinta

Păi care-i diferența între 0002 și 2 în cazul de față?
Memorat
TheNechiz
De-al casei
***

Karma: 30
Deconectat Deconectat

Mesaje: 145



Vezi Profilul
« Răspunde #5 : Octombrie 30, 2015, 14:58:23 »

da, dar apoi o sa fie:
0,1,2,3 .... 10**a
si eu cand precizez numarul de cifre(ex: 4), va trebui sa o ia 0000,0001,0002....9999
da ai dreptate...e cam ambigua cerinta

Păi care-i diferența între 0002 și 2 în cazul de față?

Eu zic că l-ai putea genera pe 2000 și să-l numeri de 4 (2000,0200,0020,0002). Adică de numărul de 0-uri +1.
Oricum descompui numărul pe cifre ca să faci suma lor și numerele nu trebuie afișate, doar numărul lor.
Memorat
klamathix
Echipa infoarena
Nu mai tace
*****

Karma: 733
Deconectat Deconectat

Mesaje: 1.216



Vezi Profilul
« Răspunde #6 : Octombrie 30, 2015, 15:03:24 »

Nu e bine, fiindcă pe 22 spre exemplu îl numeri de mai multe ori (provine din 2200, 2002, 2020, etc.). Cel mai simplu e cum am spus mai sus, trebuie să modifice doar câteva caractere Smile.
Memorat
TheNechiz
De-al casei
***

Karma: 30
Deconectat Deconectat

Mesaje: 145



Vezi Profilul
« Răspunde #7 : Octombrie 30, 2015, 15:08:53 »

Nu e bine, fiindcă pe 22 spre exemplu îl numeri de mai multe ori (provine din 2200, 2002, 2020, etc.). Cel mai simplu e cum am spus mai sus, trebuie să modifice doar câteva caractere Smile.

Aici îți dau dreptate, ca ceea ce am zis eu să meargă trebuie schimbată implementarea.
Memorat
AlexAnastasiu
Strain


Karma: -1
Deconectat Deconectat

Mesaje: 5



Vezi Profilul
« Răspunde #8 : Noiembrie 06, 2015, 18:02:13 »

Daca numarul tau incepe cu 0 ai putea (desi te-ai cam complica) sa-i pui cifrele intr-un vector. Asa ar lua toate vairantele posibile. Problema e timpul. Vezi daca ai in cerinta un anumit timp,pentru ca s-ar putea sa nu intre. Spor la lucru!
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines