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

Daca pun la final nr=nr*10+v[j] nu primesc 100p , dar daca pun doar fout<

Cerința
Se dau două numere naturale diferite. Afişaţi cel mai mare număr care poate fi scris folosind toate cifrele celor două numere date.
Date de intrare
Fișierul de intrare numere6.in conține pe prima linie cele două numere.
Date de ieșire
Fișierul de ieșire numere6.out va conține pe prima linie numărul cerut.

Anexe:

Răspunsuri la întrebare

Răspuns de antonii
1
Nu ai scris toata intrebarea dar cred ca stiu care e problema.
Insa mai intai niste sfaturi: poti folosii libraria algorithm (functia sort pe vectori) pentru a sorta elementele unui vector mult mai usor (si cu vectori e mult mai usor de lucrat deoarece exista atatea functii pentru ei si mai ales pentru ca poti sa-i redimensionezi).

Am detectat in rezolvarea ta doua probleme:
  1) Cand ai inchis stream-urile (fin si fout) ai facut acest lucru dupa return 0; Cand codul e executat tot ce este dupa return nu mai este procesat.
--desi acest lucru nu ar trebui sa cauzeze ceva probleme
   2) Ma gandesc ca problema specifica faptul ca cele doua numere sunt destul de mari. Dar chiar si daca n-ar fi (ex.:480024 80544) acestea combinat fac un numar foarte mare (si intra in overflow si iti mai indica vreun numar negativ....)

Pentru a rezolva problema asta poti folosii long long dar si un vector deoarece nu stii cate cifre au impreuna numerele:

(Varianta fara fin si fout):
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

int main(){
    unsigned long long i=0,a,b,c,j,d,aux,nr=0; //am scapat de e
    cin >> a;
    cin >> b;
    vector <int> v;   //unsigned int v[20];
    do{
        c=a%10;
        //i++;
        v.push_back(c);     //v[i]=c;
        a/=10;
    }while(a!=0);


    do{
        c=b%10;
        //i++;
        v.push_back(c);   //v[i]=c;
        b/=10;
    }while(b!=0); 
  
    //poti folosii si varianta cu j=1 si j<i daca folosesti un array in loc de vector
    // de asemenea aici puteai folosii direct sort....
    for(j=0; j<i-1; j++)
       for(d=j+1; d<=i-1; d++)
            if(v[j]<=v[d]){
                aux=v[j];
                v[j]=v[d];
                v[d]=aux;
            }
    for(j=0; j<i; j++)
        nr=nr*10+v[j];
        cout<<nr;
        //fin close
    //fout close
    return 0;
}

ionutg38: #include <iostream>
#include <fstream>
using namespace std;

int main()
{
ifstream f("numere6.in");
ofstream g("numere6.out");
long long int m,n,i,j,c[10]={0,0,0,0,0,0,0,0,0,0};
f>>m>>n;
if(m==0) c[0]++;
if(n==0) c[0]++;
if(m==0&&n==0) c[0]--;
while(m)
{
c[m%10]++;
m/=10;
}
while(n)
{
c[n%10]++;
n/=10;
}
for(i=9;i>=0;i--)
for(j=1;j<=c[i];j++)
g<<i;
return 0;
}
ionutg38: aceasta e solutia de 100 pct
Răspuns de AntiEaglesDavids
1
#include <bits/stdc++.h>
using namespace std;
ifstream fin("numere6.in");
ofstream fout("numere6.out");

int main()
{
    string a, b, s;
    fin >> a >> b;
    s = a + b;
    sort(rbegin(s), rend(s));
    fout << s;
    return 0;
}



antonii: accest cod nu va fi compilat pe multe compilatoare....proceed with caution
Alte întrebări interesante