Informatică, întrebare adresată de sectumsempra, 9 ani în urmă

Am o problemă la info ce nu-mi iese nicicum.
Enunțul este următorul:
Subprogramul cif, cu doi parametri, primeşte prin intermediul parametrului a un număr
natural cu cel mult 8 cifre şi prin intermediul parametrului b o cifră; subprogramul returnează numărul de apariţii ale cifrei b în scrierea numărului a.
Exemplu: pentru a=125854 şi b=5, subprogramul va returna valoarea 2.
a) Scrieţi definiţia completă a subprogramului cif. (4p.)
b) Scrieţi un program C/C++ care citeşte de la tastatură un număr natural n cu exact 8 cifre şi care determină şi afişează pe ecran, folosind apeluri utile ale subprogramului cif, cel mai mare număr palindrom ce poate fi obţinut prin rearanjarea tuturor cifrelor numărului n. Dacă nu se poate obţine un palindrom din toate cifrele numărului n, programul va afişa pe ecran numărul 0. Un număr natural este palindrom dacă este egal cu numărul obţinut prin scrierea cifrelor sale în ordine inversă.
Exemplu: dacă n=21523531 atunci se va afişa pe ecran numărul 53211235, iar dacă
n=12272351 atunci se va afişa pe ecran numărul 0.

Răspunsuri la întrebare

Răspuns de ardyarde
9
#include <iostream>
using namespace std;

int cif(int a, int b)
{
    int x=0;
    while(a)
    {
        if(a%10==b)
        x++;
    a/=10;
    }
return x;
}

int main()
{
    int v[10]={0};
    int x,k=0,n=0,z=0,i;
    cin>>x;
    for(i=0;i<10;i++)
    {
        v[i]=cif(x,i);
        if(v[i]%2!=0)
        k++;
        if(v[i])
            z+=v[i];
    }
    if(k>1)
        cout<<0;
else
 {
    for(i=9;i>=0;i--)
      if(v[i] && v[i]!=1)
      {
      n+=i;
      n*=10;
      }
    for(i=0;i<=9;i++)
      if(v[i] && v[i]!=1)
      {
      n+=i;
      n*=10;
      }
        n/=10;
    cout<<n;
 }
return 0;
}

sectumsempra: Îți mulțumesc mult de toooot, mi-ai fost de mare ajutor! O zi faină-ți doresc :D
ardyarde: cu placere, sper ca ai inteles programul.
Alte întrebări interesante