【问题标题】:using vector as function output使用向量作为函数输出
【发布时间】:2017-02-24 13:17:45
【问题描述】:

我正在尝试编写一个代码显示所有具有以下特征的数字:

  • 数字本身是质数。

  • 对于从右侧删除的每个数字,剩余的数字仍应为质数。

以数字 293 为例:293 本身是质数,如果我们删除右边的数字,我们有 29,它仍然是一个质数,如果我们再次删除右边的数字,我们有 2,它仍然是质数。

我正在尝试编写一个代码,从用户那里获取整数 nshow),返回向量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;
}

【问题讨论】:

  • 听起来您可能需要学习如何使用调试器来单步调试您的代码。使用好的调试器,您可以逐行执行您的程序,并查看它与您期望的偏差在哪里。如果您要进行任何编程,这是必不可少的工具。延伸阅读:How to debug small programs
  • 您确实应该将show 的返回值保存在main 中,而不是计算素数n+2 次。

标签: c++ function vector


【解决方案1】:

除了有问题的 cmets,请查看show(n - 1) 行。你不应该保存返回值:v = show(n - 1)

另外,最好将矢量作为参考传递,这样可以避免矢量内容的副本(在您的情况下,它不会产生太大影响,因为矢量不会增长太多,但想象一下使用大n) 的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-09
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多