•bcos96
Strain
Karma: 0
Deconectat
Mesaje: 2
|
|
« : 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
|
|
« 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
Mesaje: 2
|
|
« 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
|
|
« Răspunde #3 : Octombrie 30, 2015, 14:50:04 » |
|
Sincer, eu nu știu niciun număr care să înceapă cu 0. 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ă. 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
|
|
« 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
|
|
« 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
|
|
« 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 .
|
|
|
Memorat
|
|
|
|
•TheNechiz
|
|
« 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 . Aici îți dau dreptate, ca ceea ce am zis eu să meargă trebuie schimbată implementarea.
|
|
|
Memorat
|
|
|
|
•AlexAnastasiu
Strain
Karma: -1
Deconectat
Mesaje: 5
|
|
« 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
|
|
|
|
|