Problema c++

Discutii despre tot ce nu se incadreaza in celelalte categorii.

Moderators: Moderatori ajutatori, Moderatori

Post Reply
User avatar
ioang
Utilizator neserios (tepar)
Utilizator neserios (tepar)
Posts: 1169
Joined: 12 Feb 2011, 14:04
Detinator Steam: Nu
CS Status: Citesc forumul eXtreamCS.com!
Reputatie: Fost moderator
Utilizator neserios (tepar)
Fond eXtream: 0
Has thanked: 21 times
Been thanked: 23 times
Contact:

23 Aug 2016, 19:51

Să se scrie o funcţie care primeşte ca argumente două numere naturale a şi b şi returnează numărul de elemente din intervalul [a,b] care au cifra de control egală cu a.
Cifra de control a unui număr se obţine efectuând suma cifrelor sale, apoi suma cifrelor acestei sume etc. până se obţine o sumă formată dintr-o singură cifră. De exemplu, cifra de control a numărului 645 este 6. (6+4+5=15, 1+5=6)
Am reusit sa fac urmatorul algoritm:

int sum_cifra_control(int a,int b)
{
int n,s,nr,numar;
s=0;
nr=0;
numar=0;
if(n>=a && n<=b)
while(n!=0)
{
s=s+n%10;
n=n/10;
}
while(s!=0)
{nr=nr+s%10;
s=s/10;}
if (nr==a)
numar++;
return nr;
}



Nu imi pot da seama ce este gresit la el.
RoyalServer 2
User avatar
iLuSiOn
Membru, skill +2
Membru, skill +2
Posts: 881
Joined: 06 May 2011, 17:05
Detinator Steam: Da
Has thanked: 1 time
Been thanked: 7 times
Contact:

24 Aug 2016, 14:19

Code: Select all

#include <iostream.h>

int functie (int a, int b)
{
	int i, nr, n, s;
	nr = 0;
	for (i = a; i <= b; i++)
	{
		n = i;
		s = 0;
		while (n > 0)
		{
			s = s + n % 10;
			n = n / 10;
		}

		while (s > 9)
		{
			n = s;
			s = 0;
			while (n > 0)
			{
				s = s + n % 10;
				n = n / 10;
			}
		}

		if (s == a)
			nr ++;
	}
	return nr;
}

int main ()
{
	int a, b;
	cin >> a >> b;
	cout << functie(a, b);
}
cred ca asta e ceea ce cauti
intre 2 si 1000 mi-a afisat 111

EDIT: un mic comentariu asupra codului tau:

Code: Select all

int sum_cifra_control(int a,int b)
{
int n,s,nr,numar;
s=0;
nr=0;
numar=0;
if(n>=a && n<=b) // tu ai declarat int n si el nu ia nicio valoarea => nu intra in if.
while(n!=0) // recomand n > 0
{
s=s+n%10;
n=n/10;
}
while(s!=0)
{nr=nr+s%10;
s=s/10;}
if (nr==a)
numar++;
return nr;
}
plus ca iti cere toate numerele intre a si b, trebuie luat for asa cum am facut eu. tu faci while-ul unui singur numar: n, care nu ia nicio valoare. puteai sa incepi cu n = a si apoi il cresteai pana la b.
Post Reply

Return to “Discutii generale”

  • Information