Ich versuche, einen Code zu schreiben, zeigt alle Zahlen mit den folgenden Merkmalen:mit Vektor als Funktionsausgabe
die Zahl selbst eine Primzahl ist.
für jede von rechts entfernte Ziffer sollte die verbleibende Zahl immer noch eine Primzahl sein.
In Anbetracht der Zahl 293 zum Beispiel: 293 selbst eine Primzahl ist, wenn wir die Ziffer auf der wir 29 rechts löschen, die noch eine Primzahl ist, und wenn wir die rechte Ziffer löschen wieder haben wir 2 die ist immer noch Prime.
Ich versuche, einen Code zu schreiben, der die Ganzzahl n < = 8 vom Benutzer erhält und alle n-stellige Zahlen mit den oben genannten Eigenschaften zeigt. Mein Algorithmus soll eine rekursive Funktion (show
) schreiben, die den Vektor v
zurückgibt.
Wenn n=1
es dann nur die Zahlen zeigt 2-3-5-7 ... wenn n!=1
es show(n-1)
nennen sollte und multiplizieren alle generierten Zahlen von 10 und fügen Sie sie mit ungeraden Zahlen auf ... dann sollte es überprüfen wenn die neue Nummer prim ist. Wenn ja, sollte es zum Vektor hinzugefügt werden.
Mein Problem ist der Code funktioniert nur für n=1
. Hier ist mein Code:
#include <iostream>
#include <cmath>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;
bool isPrime(int a)
{
int i, p = 0;
if (a == 1)
return false;
else
{
for (i = a - 1; i > sqrt(a); i--)
if (a % i == 0)
p++;
if (p != 0)
return false;
else
return true;
}
}
vector<int> show(int n)
{
vector<int> v;
int i, j;
if (n == 1)
{
v.push_back(2);
v.push_back(3);
v.push_back(5);
v.push_back(7);
}
else
{
show(n - 1);
if (n != 1)
for (i = 0; i < v.size(); i++)
{
for (j = 1; j <= 9; j += 2)
if (isPrime((v.at(i) * 10) + j))
v.at(i) = (v.at(i) * 10) + j;
}
}
return v;
}
int main()
{
int n, s = 0, i;
cin >> n;
show(n);
for (i = 0; i < show(n).size(); i++)
cout << show(n).at(i) << endl;
system("pause");
return 0;
}
Es klingt wie Sie müssen lernen, wie Sie einen Debugger verwenden, um durch Ihren Code zu gehen. Mit einem guten Debugger können Sie Ihr Programm Zeile für Zeile ausführen und sehen, wo es von dem, was Sie erwarten, abweicht. Dies ist ein essentielles Werkzeug, wenn Sie programmieren wollen. Weiterführende Literatur: ** [Wie kleine Programme zu debuggen] (http://ericlippert.com/2014/03/05/how-to-debug-small-programs/) ** – NathanOliver
Sie sollten wirklich den Rückgabewert von 'speichern show 'in' main' anstatt die Primes 'n + 2' mal zu berechnen. – mch