<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Programmieraufgabe &amp;quot;Münzenproblem&amp;quot;]]></title><description><![CDATA[<p>Hallo zusammen</p>
<p>Als Übung sollen wir auf C++ ein Programm schreiben welches testet, ob ein Betrag B durch bestimmte Münzen passend bezahlt werden kann.<br />
Der Betrag B soll eingegeben werden. Genauso soll man eingeben können, wie viele verschiedene Münzen (Anzahl n) es gibt und deren Werte w1 bis wn.</p>
<p>Das Program habe ich zuerst für eine fixe Anzahl Münzen und fixe Münzenwerte geschrieben. Dann ist das Problem einfach lösbar. Ich habe dazu eine rekursive Funktion geschrieben in der Form:</p>
<p>if(betrag == 0)<br />
{<br />
return true;<br />
}<br />
else if(betrag &lt; 0)<br />
{<br />
return false,<br />
}<br />
else<br />
{<br />
return funktion(betrag - w1) || funktion(betrag - w2);<br />
}</p>
<p>Dies klappt ohne Probleme, aber ich verstehe nicht ganz wie ich es lösen kann, dass ich die Anzahl Münzen und die Münzenwerte nicht fix setzen muss.</p>
<p>Wäre es vielleicht sinnvoll die Münzwerte w in einem array zu speichern?<br />
Habt ihr mir dazu einen Tipp / Lösungsansatz?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/302210/programmieraufgabe-quot-münzenproblem-quot</link><generator>RSS for Node</generator><lastBuildDate>Tue, 11 Aug 2026 09:22:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/302210.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 13 Apr 2012 13:24:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Programmieraufgabe &amp;quot;Münzenproblem&amp;quot; on Fri, 13 Apr 2012 13:24:35 GMT]]></title><description><![CDATA[<p>Hallo zusammen</p>
<p>Als Übung sollen wir auf C++ ein Programm schreiben welches testet, ob ein Betrag B durch bestimmte Münzen passend bezahlt werden kann.<br />
Der Betrag B soll eingegeben werden. Genauso soll man eingeben können, wie viele verschiedene Münzen (Anzahl n) es gibt und deren Werte w1 bis wn.</p>
<p>Das Program habe ich zuerst für eine fixe Anzahl Münzen und fixe Münzenwerte geschrieben. Dann ist das Problem einfach lösbar. Ich habe dazu eine rekursive Funktion geschrieben in der Form:</p>
<p>if(betrag == 0)<br />
{<br />
return true;<br />
}<br />
else if(betrag &lt; 0)<br />
{<br />
return false,<br />
}<br />
else<br />
{<br />
return funktion(betrag - w1) || funktion(betrag - w2);<br />
}</p>
<p>Dies klappt ohne Probleme, aber ich verstehe nicht ganz wie ich es lösen kann, dass ich die Anzahl Münzen und die Münzenwerte nicht fix setzen muss.</p>
<p>Wäre es vielleicht sinnvoll die Münzwerte w in einem array zu speichern?<br />
Habt ihr mir dazu einen Tipp / Lösungsansatz?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2201634</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2201634</guid><dc:creator><![CDATA[ands]]></dc:creator><pubDate>Fri, 13 Apr 2012 13:24:35 GMT</pubDate></item><item><title><![CDATA[Reply to Programmieraufgabe &amp;quot;Münzenproblem&amp;quot; on Fri, 13 Apr 2012 13:40:59 GMT]]></title><description><![CDATA[<p>Genau. Und die letzte Zeile der Funktion ersetzt Du dann mit einer Schleife, in der Du alle Array-Elemente durchgehst. Jetzt musst Du Dir nur noch überlegen, wie Du dann das || nachbaust.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2201637</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2201637</guid><dc:creator><![CDATA[SG1]]></dc:creator><pubDate>Fri, 13 Apr 2012 13:40:59 GMT</pubDate></item><item><title><![CDATA[Reply to Programmieraufgabe &amp;quot;Münzenproblem&amp;quot; on Fri, 13 Apr 2012 19:00:14 GMT]]></title><description><![CDATA[<p>Also. Du musst dein programm umstrukturieren.</p>
<p>Erstes muss der Benutzer eingeben, wie viele verschiedene Münzen er hat.</p>
<p>Dann erzeugst du einen Vector von dieser Größe.</p>
<p>Dann lässt du das ganze in einer Schleife einlesen (die Münzwerte)</p>
<p>Dann sortierst du den Vector (das größte Element an den Anfang)</p>
<p>Dann gibt der Benutzer den Betrag ein.</p>
<p>Dann gehst du den Vector durch und schaust, ob der Betrag größergleich dem Münzwert ist. Wenn ja, den Münzwert abziehen. wenn nein, zum nächst kleineren Münze gehen.</p>
<p>Wenn du am Ende einen Restbetrag hast, dann gehst halt nicht, wenn der Restbetrag null ist, dann gehts.</p>
<p>P.S.: Editiert..... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2201749</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2201749</guid><dc:creator><![CDATA[Die erinnerung]]></dc:creator><pubDate>Fri, 13 Apr 2012 19:00:14 GMT</pubDate></item><item><title><![CDATA[Reply to Programmieraufgabe &amp;quot;Münzenproblem&amp;quot; on Fri, 13 Apr 2012 19:27:37 GMT]]></title><description><![CDATA[<p>Die erinnerung schrieb:</p>
<blockquote>
<p>[...]</p>
</blockquote>
<p>Das funktioniert so nicht. Angenommen ich habe einen Betrag von 8 und Münzen mit dem Wert 5 und 2.<br />
Nach der von Dir skizzierten Methode würde ich zunächst 5 von 8 subtrahieren und dann feststellen, dass ich den verbleibenden Betrag von 3 nicht mehr mit meinem Münzvorrat darstellen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2201768</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2201768</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Fri, 13 Apr 2012 19:27:37 GMT</pubDate></item><item><title><![CDATA[Reply to Programmieraufgabe &amp;quot;Münzenproblem&amp;quot; on Fri, 13 Apr 2012 19:56:30 GMT]]></title><description><![CDATA[<p>Die erinnerung schrieb:</p>
<blockquote>
<p>Dann gehst du den Vector durch und schaust, ob der Betrag größergleich dem Münzwert ist. Wenn ja, den Münzwert abziehen. <em><strong>wenn nein, zum nächst kleineren Münze gehen.</strong></em></p>
</blockquote>
<p>Gegenbeweis:</p>
<p>Betrag: 8</p>
<p>Münzen (sortiert): 5; 2</p>
<p>8 &gt;= 5 ?<br />
Ja!<br />
8 - 5 = 3<br />
3 &gt;= 5 ?<br />
Nein! Nächste Münze.<br />
3 &gt;= 2 ?<br />
Ja!<br />
3 - 2 = 1<br />
1 &gt;= 2 ?<br />
Nein! Nächste Münze nicht vorhanden! Letzter Schritt</p>
<p>1 == 0?<br />
Nein!<br />
=&gt; Betrag nicht auszahlbar! :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2201780</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2201780</guid><dc:creator><![CDATA[Die erinnerung]]></dc:creator><pubDate>Fri, 13 Apr 2012 19:56:30 GMT</pubDate></item><item><title><![CDATA[Reply to Programmieraufgabe &amp;quot;Münzenproblem&amp;quot; on Fri, 13 Apr 2012 20:27:37 GMT]]></title><description><![CDATA[<p>Jo eben, das ist Dein Ergebnis, aber der Betrag ist doch auszahlbar, wenn ich ihn in vier 2er - Münzen auszahle.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2201791</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2201791</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Fri, 13 Apr 2012 20:27:37 GMT</pubDate></item><item><title><![CDATA[Reply to Programmieraufgabe &amp;quot;Münzenproblem&amp;quot; on Fri, 13 Apr 2012 20:54:01 GMT]]></title><description><![CDATA[<p>Belli schrieb:</p>
<blockquote>
<p>Jo eben, das ist Dein Ergebnis, aber der Betrag ist doch auszahlbar, wenn ich ihn in vier 2er - Münzen auszahle.</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>@Die erinnerung<br />
Dein Greedy-Algorithmus - so wie du ihn beschrieben hast - funktioniert nicht. Ein Gegebeispiel hat ja Belli bereits gebracht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2201796</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2201796</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Fri, 13 Apr 2012 20:54:01 GMT</pubDate></item><item><title><![CDATA[Reply to Programmieraufgabe &amp;quot;Münzenproblem&amp;quot; on Fri, 13 Apr 2012 20:48:45 GMT]]></title><description><![CDATA[<p>ok. Stimmt! Denkfehler.</p>
<p>Wenn du deinen Nimmst, versuche die ganzen || in einer Schleife zu lösen.</p>
<pre><code class="language-cpp">bool flag = false;

for(int i = 0; i &lt; muenzen.size(); i++)
{
    flag ||= funktion(betrag -  muenzen[i]);
}

return flag;
</code></pre>
<p>Die Rekursion könnte dann aber ganz schnell überhand nehmen...</p>
<p>Aber so funktionierts (relativ) sicher.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2201799</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2201799</guid><dc:creator><![CDATA[Die erinnerung]]></dc:creator><pubDate>Fri, 13 Apr 2012 20:48:45 GMT</pubDate></item><item><title><![CDATA[Reply to Programmieraufgabe &amp;quot;Münzenproblem&amp;quot; on Fri, 13 Apr 2012 20:57:10 GMT]]></title><description><![CDATA[<p>Die Rekursionsgleichung kann man folgendermassen schreiben:<br />
Sei B der Betrag, der man erreichen moechte und <span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi>M</mi><mo>=</mo><mo>{</mo><mi>m</mi><mi mathvariant="normal">_</mi><mn>1</mn><mo separator="true">,</mo><mi>m</mi><mi mathvariant="normal">_</mi><mn>2</mn><mo separator="true">,</mo><mo>…</mo><mo separator="true">,</mo><msub><mi>m</mi><mi>n</mi></msub><mo>}</mo></mrow><annotation encoding="application/x-tex">M = \{m\_1, m\_2, \ldots, m_n\}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:0.75em;"></span><span class="strut bottom" style="height:1.06em;vertical-align:-0.31em;"></span><span class="base textstyle uncramped"><span class="mord mathit" style="margin-right:0.10903em;">M</span><span class="mrel">=</span><span class="mopen">{</span><span class="mord mathit">m</span><span class="mord mathrm" style="margin-right:0.02778em;">_</span><span class="mord mathrm">1</span><span class="mpunct">,</span><span class="mord mathit">m</span><span class="mord mathrm" style="margin-right:0.02778em;">_</span><span class="mord mathrm">2</span><span class="mpunct">,</span><span class="minner">…</span><span class="mpunct">,</span><span class="mord"><span class="mord mathit">m</span><span class="vlist"><span style="top:0.15em;margin-right:0.05em;margin-left:0em;"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span><span class="reset-textstyle scriptstyle cramped"><span class="mord mathit">n</span></span></span><span class="baseline-fix"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span>​</span></span></span><span class="mclose">}</span></span></span></span> die Menge der Muenzen. Erreichbar(B) entscheidet, ob man B mit M erreichen kann oder nicht.</p>
<p><span class="katex-display"><span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi>E</mi><mi>r</mi><mi>r</mi><mi>e</mi><mi>i</mi><mi>c</mi><mi>h</mi><mi>b</mi><mi>a</mi><mi>r</mi><mo>(</mo><mi>W</mi><mi>e</mi><mi>r</mi><mi>t</mi><mo>)</mo><mo>=</mo><mrow><mo fence="true">{</mo><mtable><mtr><mtd><mrow><mi>T</mi><mi>r</mi><mi>u</mi><mi>e</mi><mo separator="true">,</mo><mspace width="1em"></mspace><mi>W</mi><mi>e</mi><mi>r</mi><mi>t</mi><mo>=</mo><mn>0</mn></mrow></mtd></mtr><mtr><mtd><mrow><mi>F</mi><mi>a</mi><mi>l</mi><mi>s</mi><mi>e</mi><mo separator="true">,</mo><mspace width="1em"></mspace><mi>W</mi><mi>e</mi><mi>r</mi><mi>t</mi><mo>&lt;</mo><mn>0</mn></mrow></mtd></mtr><mtr><mtd><mrow><mi mathvariant="normal">∀</mi><mi>m</mi><mo>∈</mo><mi>M</mi><mo>:</mo><mi>E</mi><mi>r</mi><mi>r</mi><mi>e</mi><mi>i</mi><mi>c</mi><mi>h</mi><mi>b</mi><mi>a</mi><mi>r</mi><mo>(</mo><mi>W</mi><mi>e</mi><mi>r</mi><mi>t</mi><mo>−</mo><mi>m</mi><mo>)</mo><mo separator="true">,</mo><mspace width="1em"></mspace><mi>s</mi><mi>o</mi><mi>n</mi><mi>s</mi><mi>t</mi></mrow></mtd></mtr></mtable></mrow></mrow><annotation encoding="application/x-tex">Erreichbar(Wert) =  
\begin{cases}  
True, \quad Wert = 0 \\  
False, \quad Wert &lt; 0 \\  
\forall m \in M: Erreichbar(Wert-m), \quad sonst  
\end{cases}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:2.41em;"></span><span class="strut bottom" style="height:4.32em;vertical-align:-1.9099999999999997em;"></span><span class="base displaystyle textstyle uncramped"><span class="mord mathit" style="margin-right:0.05764em;">E</span><span class="mord mathit" style="margin-right:0.02778em;">r</span><span class="mord mathit" style="margin-right:0.02778em;">r</span><span class="mord mathit">e</span><span class="mord mathit">i</span><span class="mord mathit">c</span><span class="mord mathit">h</span><span class="mord mathit">b</span><span class="mord mathit">a</span><span class="mord mathit" style="margin-right:0.02778em;">r</span><span class="mopen">(</span><span class="mord mathit" style="margin-right:0.13889em;">W</span><span class="mord mathit">e</span><span class="mord mathit" style="margin-right:0.02778em;">r</span><span class="mord mathit">t</span><span class="mclose">)</span><span class="mrel">=</span><span class="minner displaystyle textstyle uncramped"><span class="style-wrap reset-textstyle textstyle uncramped"><span class="delimsizing mult"><span class="vlist"><span style="top:0.9500099999999998em;"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span><span class="delimsizinginner delim-size4"><span>⎩</span></span></span><span style="top:0.9500099999999998em;"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span><span class="delimsizinginner delim-size4"><span>⎪</span></span></span><span style="top:-0.000010000000000287557em;"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span><span class="delimsizinginner delim-size4"><span>⎨</span></span></span><span style="top:-1.1500100000000002em;"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span><span class="delimsizinginner delim-size4"><span>⎪</span></span></span><span style="top:-1.4500200000000003em;"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span><span class="delimsizinginner delim-size4"><span>⎧</span></span></span><span class="baseline-fix"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span>​</span></span></span></span><span class="mord"><span class="mtable"><span class="col-align-l"><span class="vlist"><span style="top:-1.4020000000000001em;"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span><span class="mord displaystyle textstyle uncramped"><span class="mord mathit" style="margin-right:0.13889em;">T</span><span class="mord mathit" style="margin-right:0.02778em;">r</span><span class="mord mathit">u</span><span class="mord mathit">e</span><span class="mpunct">,</span><span class="mord mspace quad"></span><span class="mord mathit" style="margin-right:0.13889em;">W</span><span class="mord mathit">e</span><span class="mord mathit" style="margin-right:0.02778em;">r</span><span class="mord mathit">t</span><span class="mrel">=</span><span class="mord mathrm">0</span></span></span><span style="top:0.0379999999999997em;"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span><span class="mord displaystyle textstyle uncramped"><span class="mord mathit" style="margin-right:0.13889em;">F</span><span class="mord mathit">a</span><span class="mord mathit" style="margin-right:0.01968em;">l</span><span class="mord mathit">s</span><span class="mord mathit">e</span><span class="mpunct">,</span><span class="mord mspace quad"></span><span class="mord mathit" style="margin-right:0.13889em;">W</span><span class="mord mathit">e</span><span class="mord mathit" style="margin-right:0.02778em;">r</span><span class="mord mathit">t</span><span class="mrel">&lt;</span><span class="mord mathrm">0</span></span></span><span style="top:1.4779999999999998em;"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span><span class="mord displaystyle textstyle uncramped"><span class="mord mathrm">∀</span><span class="mord mathit">m</span><span class="mrel">∈</span><span class="mord mathit" style="margin-right:0.10903em;">M</span><span class="mrel">:</span><span class="mord mathit" style="margin-right:0.05764em;">E</span><span class="mord mathit" style="margin-right:0.02778em;">r</span><span class="mord mathit" style="margin-right:0.02778em;">r</span><span class="mord mathit">e</span><span class="mord mathit">i</span><span class="mord mathit">c</span><span class="mord mathit">h</span><span class="mord mathit">b</span><span class="mord mathit">a</span><span class="mord mathit" style="margin-right:0.02778em;">r</span><span class="mopen">(</span><span class="mord mathit" style="margin-right:0.13889em;">W</span><span class="mord mathit">e</span><span class="mord mathit" style="margin-right:0.02778em;">r</span><span class="mord mathit">t</span><span class="mbin">−</span><span class="mord mathit">m</span><span class="mclose">)</span><span class="mpunct">,</span><span class="mord mspace quad"></span><span class="mord mathit">s</span><span class="mord mathit">o</span><span class="mord mathit">n</span><span class="mord mathit">s</span><span class="mord mathit">t</span></span></span><span class="baseline-fix"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span>​</span></span></span></span></span><span class="sizing reset-size5 size5 reset-textstyle textstyle uncramped nulldelimiter"></span></span></span></span></span></span></p>
<p>Damit man nicht so viele Rekursionsaufrufe hat verwendent man Memoization oder noch besser Dynamische Programmierung.</p>
<p>In diesem Fall braucht man fuer die Dynamische Programmierung nicht einmal eine Tablle. Es reicht ein Array der Laenge B.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2201801</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2201801</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Fri, 13 Apr 2012 20:57:10 GMT</pubDate></item><item><title><![CDATA[Reply to Programmieraufgabe &amp;quot;Münzenproblem&amp;quot; on Fri, 13 Apr 2012 22:03:07 GMT]]></title><description><![CDATA[<p>Ich glaube, so gehts:</p>
<pre><code class="language-cpp">#include &lt;vector&gt;

using namespace std;

vector&lt;int&gt; m; //Vektor mit den zur Verfügung stehenden Münzwerten

bool erreichbar(int b)
{
	if(b == 0)
		return true;
	if(b &lt; 0)
		return false;

	for(int i = 0; i &lt; m.size(); ++i)
	{
		if(erreichbar(b - m[i]))
			return true;
	}

	return false;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2201824</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2201824</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Fri, 13 Apr 2012 22:03:07 GMT</pubDate></item><item><title><![CDATA[Reply to Programmieraufgabe &amp;quot;Münzenproblem&amp;quot; on Fri, 13 Apr 2012 22:06:03 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/22666">@Belli</a><br />
Ja, diese Implementierung scheint korrekt zu sein. Allerdings ist sie sehr ineffizient, wegen den vielen Rekursionsaufrufen. Wie gesagt kann hier Memoization oder Dynamische Programmierung verwendet werden.</p>
<p>Ich moechte die Loesung dafuer hier allerdings nicht posten, da ich dem Thread Ersteller nicht den Spass nehmen will.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2201825</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2201825</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Fri, 13 Apr 2012 22:06:03 GMT</pubDate></item><item><title><![CDATA[Reply to Programmieraufgabe &amp;quot;Münzenproblem&amp;quot; on Fri, 13 Apr 2012 22:25:05 GMT]]></title><description><![CDATA[<p>Tja, diese Begriffe, die Du da in den Raum wirfst, sagen mir nichts. Deshalb bin ich nicht in der Lage, eine andere Lösung zu entwerfen. Ich hab hier mal ein vollständiges Beispiel, das am Ende die benötigten Stücke ausgibt, wenn es denn eine Lösung gibt:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;sstream&gt;

using namespace std;

vector&lt;int&gt; m;
vector&lt;int&gt; r;

bool erreichbar(int b)
{
	if(b == 0)
		return true;
	if(b &lt; 0)
		return false;

	for(int i = 0; i &lt; m.size(); ++i)
	{
		if(erreichbar(b - m[i]))
		{
			r.push_back(m[i]);
			return true;
		}
	}

	return false;
}

int main(int argc, char **argv)
{
	stringstream ss;
	ss &lt;&lt; argv[1];
	int b;
	ss &gt;&gt; b;

	m.push_back(3);
	m.push_back(5);

	erreichbar(b);	

	if(!r.size())
		cout &lt;&lt; &quot;geht nicht\n&quot;;

	for(int i = 0; i &lt; r.size(); ++i)
		cout &lt;&lt; r[i] &lt;&lt; ' ';

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2201827</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2201827</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Fri, 13 Apr 2012 22:25:05 GMT</pubDate></item><item><title><![CDATA[Reply to Programmieraufgabe &amp;quot;Münzenproblem&amp;quot; on Fri, 13 Apr 2012 23:23:56 GMT]]></title><description><![CDATA[<p>Belli schrieb:</p>
<blockquote>
<p>Tja, diese Begriffe, die Du da in den Raum wirfst, sagen mir nichts.</p>
</blockquote>
<p>Falls du dich fuer algorithmische Methoden interessierst soltest du dir einmal Dynamische Programmierung anschauen. Ist eine interessante Methode um schwierige Probleme effizient (in Pseudopolynomieller Zeit) zu loesen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2201829</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2201829</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Fri, 13 Apr 2012 23:23:56 GMT</pubDate></item><item><title><![CDATA[Reply to Programmieraufgabe &amp;quot;Münzenproblem&amp;quot; on Sun, 15 Apr 2012 09:53:23 GMT]]></title><description><![CDATA[<p>Habe mir mal das Konzept der Memoization angeschaut, bin mir aber nicht sicher, ob ich das richtig verstehe...<br />
Das Ziel der Memoization besteht ja darin, dass Zwischenergebnisse nicht mehrmals neu berechnet werden, sondern gespeichert und wiederverwendet werden. Habt ihr einen Tipp, wie man das auf das Münzenbeispiel anwendet?<br />
Meine Idee:<br />
Einen Vektor &quot;vector&lt;int&gt; memory&quot; welcher alle Zwischenbeträge die berechnet werden speichert. Das heisst ein neuer Zwischenwert soll nur berechnet werden, wenn er nicht schon im Vektor steht. Ich habe nun aber zwei Fragen/Probleme...an welchen Positionen muss ich diese Zwischenbeträge jeweils speichern bzw. wie muss ich sie speichern damit ich einfach prüfen kann, ob ein Betrag bereits vorhanden ist oder nicht? Und zweitens ist mir nicht ganz klar, wie ich die Schritte einbauen kann für Betrag == 0 oder Betrag &lt;0?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2202138</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2202138</guid><dc:creator><![CDATA[ands]]></dc:creator><pubDate>Sun, 15 Apr 2012 09:53:23 GMT</pubDate></item><item><title><![CDATA[Reply to Programmieraufgabe &amp;quot;Münzenproblem&amp;quot; on Sun, 15 Apr 2012 13:40:48 GMT]]></title><description><![CDATA[<p>Eine rekursive Loesung hat ja Belli oben bereits gepostet. In der Loesung dort gibt es einen einzigen rekursiven Aufruf in Zeile 20, naemlich</p>
<pre><code class="language-cpp">erreichbar(b - m[i])
</code></pre>
<p>Das Ziel ist es nun, diesen Aufruf nicht jedes mal neu berechnen zu muessen. Das heisst du erzeugst ein Array einer bestimmten Laenge, um berechntete Teile der Rekursion zu speichern. Wenn du dann zum rekrusiven Aufruf kommst, hast du folgende zwei Moeglichkeiten:<br />
1. Du hast erreichbar(b - m[i]) bereits berechnet. Dann verwende den Wert aus dem Array und rufe erreichbar(b - m[i]) nicht rekursiv auf.<br />
2. Du hast erreichbar(b - m[i]) noch nicht berechnet. Dann rufe erreichbar(b - m[i] rekursiv auf und speichere dann die Loesung im Array.</p>
<p>Um herauszufinden, ob du erreichbar(b - m[i]) bereits berechnet hast oder nicht kannst du ein zweites Array der gleichen Groesse anlegen und dann mit true oder false speichern, ob du den Wert bereits berechnet hast.</p>
<p>Was du dich noch fragen musst ist, wie gross du das Array waehlen musst. Aber das kannst du sicher selber rausfinden.</p>
<p>Ich hoffe, die Beschreibung hilft dir etwas.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2202196</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2202196</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Sun, 15 Apr 2012 13:40:48 GMT</pubDate></item><item><title><![CDATA[Reply to Programmieraufgabe &amp;quot;Münzenproblem&amp;quot; on Sun, 15 Apr 2012 16:32:29 GMT]]></title><description><![CDATA[<p>Da würde ich eher einen Vector nehmen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2202242</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2202242</guid><dc:creator><![CDATA[Die erinnerung]]></dc:creator><pubDate>Sun, 15 Apr 2012 16:32:29 GMT</pubDate></item><item><title><![CDATA[Reply to Programmieraufgabe &amp;quot;Münzenproblem&amp;quot; on Sun, 15 Apr 2012 17:14:46 GMT]]></title><description><![CDATA[<p>Die erinnerung schrieb:</p>
<blockquote>
<p>Da würde ich eher einen Vector nehmen.</p>
</blockquote>
<p>Wenn man Array sagt duerfte klar sein, dass man dann in C++ einen std::vector oder ein std::array verwendet <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2202257</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2202257</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Sun, 15 Apr 2012 17:14:46 GMT</pubDate></item><item><title><![CDATA[Reply to Programmieraufgabe &amp;quot;Münzenproblem&amp;quot; on Sun, 15 Apr 2012 17:18:48 GMT]]></title><description><![CDATA[<p>Soooooooooooooo sicher wäre ich mir da nicht...<br />
(Ich hätte, hätte ich nicht nachgedacht, z.B <code>bool benutzt[123];</code> gemacht. Zum Beispiel...)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2202260</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2202260</guid><dc:creator><![CDATA[Die erinnerung]]></dc:creator><pubDate>Sun, 15 Apr 2012 17:18:48 GMT</pubDate></item><item><title><![CDATA[Reply to Programmieraufgabe &amp;quot;Münzenproblem&amp;quot; on Mon, 16 Apr 2012 06:17:42 GMT]]></title><description><![CDATA[<p>Deswegen ist Nachdenken ja auch so wichtig. Ich würde auf den ersten Blick eine map wählen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2202387</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2202387</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Mon, 16 Apr 2012 06:17:42 GMT</pubDate></item><item><title><![CDATA[Reply to Programmieraufgabe &amp;quot;Münzenproblem&amp;quot; on Mon, 16 Apr 2012 12:12:54 GMT]]></title><description><![CDATA[<p>Habe es mit Vektoren gemacht... mit den Tipps von icarus2 (danke!) ist's dann ziemlich einfach und klappt gut <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2202480</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2202480</guid><dc:creator><![CDATA[ands]]></dc:creator><pubDate>Mon, 16 Apr 2012 12:12:54 GMT</pubDate></item></channel></rss>