-4
我試圖寫的代碼顯示所有的數字具有以下特點:使用向量作爲功能輸出
號碼本身是一個素數。
對於從右邊移除的每個數字,剩下的數字仍然應該是質數。
考慮數293例如:293本身是一個素數,如果我們刪除我們有29右邊的數字仍然是一個素數,如果我們刪除右邊的數字再次,我們有2,仍然是素數。
我試圖編寫一個代碼,它從用戶那裏獲得整數n < = 8,並顯示具有上述特徵的所有n位數字。我的算法是編寫一個遞歸函數(show
),它返回矢量v
。
如果n=1
那麼它只是顯示的數字2-3-5-7 ......如果n!=1
應該調用show(n-1)
乘以10的所有生成的數字,並將它們添加了奇數......那麼就應該檢查如果新號碼是首要的。如果是這樣,它應該被添加到矢量。
我的問題是代碼只適用於n=1
。這裏是我的代碼:
#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;
}
這聽起來像你可能需要學習如何使用調試器來遍歷代碼。使用一個好的調試器,您可以逐行執行您的程序,並查看它與您期望的偏離的位置。如果你打算做任何編程,這是一個重要的工具。進一步閱讀:** [如何調試小程序](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)** – NathanOliver
你真的應該保存'在'main'中顯示'而不是計算素數'n + 2'次。 – mch