seltsames Problem



  • Hallo, hier einmal eine programmtechnische Frage,

    ich möchte ein Tool schreiben, welches folgendes kann:

    Es soll aus einer gegebenen Menge alle Zahlen heraussuchen, die sich durch alle solche Zahlen teilen lassen ohne Rest, welche das Programm aus einfachen Differenzen aus der gegebenen Zahlenmenge herstellt.

    Das Problem ist. Es muß also einen Speicher haben, indem die Teilerzahlen eingetragen werden, möglichst sortiert, und dann zu diesen Einträgen einen Index und Zähler. Ausgegeben soll das Ergebnis nicht laufend, sondern erst am Ende der Operation.

    Ich weiß gar nicht, wie ich das beginnen soll, einen Container (Zahlen), wo zu jedem Speichereintrag ein anderer Container eröffnet ist, mit Anzahl und Index.

    Wer gibt mir einen Tip? Danke



  • Glaskugel sagt map<int, vector<int>> oder was Ähnliches.



  • Ich versteh nichtmal die Aufgabenstellung. Ist sehr verwirrend formuliert.



  • Nochmal: tardis capitibus

    1. Es gibt eine bestimmte Menge Zahlen. Zahlenbereich von bis - for schleife
    2. Er bildet alle möglichen Differenzen, die sich mit Zahlen dieses Bereiches bilden lassen. (jede einzelne in einem Speicher ablegen)
    3. Jetzt teilt er systematisch alle Zahlen des gegebene Bereichs durch die Differenzen
    4. Alle ganzzahligen Ergebnisse sollen abgespeichert werden mitsamt Zähler, wie oft ein Ergebnis erzielt wird.
    5. Ausgabe in einer Tabelle zum Schluß.

    Beispiel:

    1. 244 ist 3 mal Ergebnis und zwar 488/2, 976/4, und xyz
    2. 245 ist 7 mal Ergebnis ......

    Ist es verständlich?



  • <°))))><



  • brak schrieb:

    Nochmal: tardis capitibus

    Ich hoffe du erwartest dir jetzt nicht ernsthaft noch eine Antwort von mir.
    Statt mich als doof zu bezeichnen solltest du vielleicht besser lernen dich klar und vertändlich auszudrücken.

    BTW: Deine Angabe ist immer noch verwirrend. Muss das Programm jetzt nur "244: 3" ausgeben (laut Punkt 4 & 5 wäre das ausreichend), oder doch "244: 3 (488/2, 976/4, xzy)" wie du im "Beispiel" schreibst?



  • bak schrieb:

    1. Es gibt eine bestimmte Menge Zahlen. Zahlenbereich von bis - for schleife

    Zum Beispiel 1000 bis 1999?

    bak schrieb:

    2. Er bildet alle möglichen Differenzen, die sich mit Zahlen dieses Bereiches bilden lassen. (jede einzelne in einem Speicher ablegen)

    Und hier wird's schon doof. Im Beispiel -999 bis 999

    bak schrieb:

    Beispiel:
    1. 244 ist 3 mal Ergebnis und zwar 488/2, 976/4, und xyz
    2. 245 ist 7 mal Ergebnis ......

    Ist es verständlich?

    Ganz und gar nicht. Musst alle Schritte eindeutig machen und am besten ein großes Beispiel dazutun.



  • Oke nochmal, diesmal anders ...

    Es sollen multilinguale Texte (z.b. chinesisch; arabisch) untersucht werden. In den Texten können sehr viele verschiedene Zeichen vorkommen.

    Der Computer soll jetzt in eine Datei sortieren, welche Zeichen überhaupt, wie oft und an welcher Position sie vorkommen.

    Er findet eine Zeichen, sieht nach, ob es das schon gibt im Speicher, wenn nicht. fügt er es ein, zählt es und merkt sich die Position. Diese Tabelle soll am Ende ausgegeben werden und zwar sortiert ...

    Das ist das Problem .... Ihr sollt Euch nicht an der Sinnhaftigkeit meines matt,. Beispiels aufhängen ....



  • brak schrieb:

    Oke nochmal, diesmal anders ...

    Es sollen multilinguale Texte (z.b. chinesisch; arabisch) untersucht werden. In den Texten können sehr viele verschiedene Zeichen vorkommen.

    Der Computer soll jetzt in eine Datei sortieren, welche Zeichen überhaupt, wie oft und an welcher Position sie vorkommen.

    Er findet eine Zeichen, sieht nach, ob es das schon gibt im Speicher, wenn nicht. fügt er es ein, zählt es und merkt sich die Position. Diese Tabelle soll am Ende ausgegeben werden und zwar sortiert ...

    Das ist das Problem .... Ihr sollt Euch nicht an der Sinnhaftigkeit meines matt,. Beispiels aufhängen ....

    Also einfach die Vorkommen zählen, und der Quatsch mit den Divisionen war nur, um eine einigermaßen zufällige Quelle zu haben.

    map<Zeichen,int> anzahl;
    Zeichen zeichen;
    while(cin>>zeichen)
       ++anzahl[zeichen];
    for(auto i:zeichen)
       cout<<i->first<<' '<<i->second;
    

    Hab nur gezählt, welche Zeichen wie oft.

    Hab nicht gezählt, welche Zeichen wie oft an welcher Position, weil DU wiedermal unklar gelassen hast, was eine Position ist. Muß ja irgendwie ein Attribut sein, nacdem man gruppieren kann.



  • volkard schrieb:

    Hab nicht gezählt, welche Zeichen wie oft an welcher Position, weil DU wiedermal unklar gelassen hast, was eine Position ist. Muß ja irgendwie ein Attribut sein, nacdem man gruppieren kann.

    Danke. Als Position meine ich z. b. hier, wenn der ganze Text ein String wäre. die Position. Also das Zeichen x, wovon es insgesamt im Text y Stellen gibt, dies befinden sich an den Positionen.; a; b; u. s. w.

    In Wirklichkeit handelt es sich immer um Zahlen.



  • ungetestet: anstelle der reinen Anzahl der Vorkommen speicherst du eben die jeweiligen Indizes.

    map<Zeichen,std::vector<unsigned int>> anzahl;
    std::string meinString; // zu durchsuchender String
    
    for(unsigned int pos=0; pos<meinString.size(); ++pos)
       anzahl[zeichen].push_back(pos);
    
    for(auto i:zeichen)
    {
      cout<<i->first << ": ";
    
      for (auto pos: zeichen->second)
        cout << pos << ", ";
    
      cout << "\n";
    }
    


  • brak schrieb:

    In Wirklichkeit handelt es sich immer um Zahlen.

    Also darf ich aus Zeichen wieder int machen. Sowas nervt.

    brak schrieb:

    Danke. Als Position meine ich z. b. hier, wenn der ganze Text ein String wäre. die Position. Also das Zeichen x, wovon es insgesamt im Text y Stellen gibt, dies befinden sich an den Positionen.; a; b; u. s. w.

    Muss es denn ein String sein? Kann die Eingabe nicht ein vector<int> sein?
    Beim String ist wieder so unklar, was die Position ist. Die Position der Zahl in der dargestellten Zahlenliste oder die Position des ersten Zeichens der Zahl im String.

    Bei daddy_felix' Lösung fehlt Dir noch die Anzahl, die kannste mit cout<<zeichen->second.count(); ausgeben.



  • Als Position (...) die Position. Also (...) an den Positionen.; a; b; u. s. w.

    Ach so. Die Position! Na jetzt ist es klar.
    Rofl.


Anmelden zum Antworten