-2

我正在做一个在线挑战,遇到了一个问题!我已经在纸上制定了逻辑,但似乎我的问题不起作用。它所做的只是返回 0 作为输出。

到目前为止我的代码:

#include <iostream>

using namespace std;

int main()
{
    int n;
    cin >> n;
    int nums[50];
    string res[50];
    int o = 0;
    for(int i=0;i<n;i++)
    {
        cin >> nums[i];
    }
    for(int i=0;i<n;i++)
    {
        int deliteli=1;
        for(int j=1;j<=nums[i];j++)
        {
            if(nums[i]%j==0)
            {
                deliteli++;
            }
        }
        if(deliteli == 2){
            res[0] = "YES";
            o++;
        }
        else if(deliteli != 2){
            res[0] = "NO";
            o++;
        }
    }
    for(int i=0;i<o;i++)
    {
        cout << res[i] << endl;
    }
    return 0;
}

我正在做的是首先输入 N 个数字,这意味着数组将是多长时间,然后检查数组中的每个数字是否为素数。任何想法我做错了什么?

4

4 回答 4

2
for(int j=1;j>=nums[i];j++)
{
   ...
}

看来您的循环条件错误。它应该是:

for(int j=1;j<=nums[i];j++) //Change here
{
   ...
}
于 2013-04-06T21:32:17.687 回答
2

要检查是否nums[i]可以除以j您正在做的事情j%nums[i]==0,但必须如此nums[i]%j==0

你的deliteli柜台也有问题。您需要为每个数字重新初始化它,否则它只会添加到它。

你也一直在设置res[0],但你想设置res[i]

于 2013-04-06T21:34:47.540 回答
2
  • deliteli应该从 0 开始。

  • deliteli应在循环开始时重置。

  • 您使用res[i]而不是res[0],否则您将继续覆盖第一个元素。

  • j%nums[i]应该是nums[i]%j,因为a%b返回除以的余ab

  • '仅适用于单个字符(C++ 非常乐意允许不应该编译和运行的东西)。"用于字符串。

最终代码:

#include <iostream>

using namespace std;

int main()
{
    int n;
    cin >> n;
    int nums[50];
    string res[50];
    int o = 0;
    for(int i=0;i<n;i++)
    {
        cin >> nums[i];
    }
    for(int i=0;i<n;i++)
    {
        int deliteli=0;
        for(int j=1;j<=nums[i];j++)
        {
            if(nums[i]%j==0)
            {
                deliteli++;
            }
        }
        if(deliteli == 2){
            res[i] = "YES";
            o++;
        }
        else if(deliteli != 2){
            res[i] = "NO";
            o++;
        }
    }
    for(int i=0;i<o;i++)
    {
        cout << res[i] << endl;
    }
    return 0;
}

测试

于 2013-04-06T21:41:10.837 回答
1

首先:检查是否nums[i]可以根据j您正在做的事情进行划分j%nums[i]==0,但必须如此nums[i]%j==0

第二:for(int j=1;j>=nums[i];j++) 改成for(int j=1;j<=nums[i];j++)

最后:您不必测试数字nums[i]nums[i]只需对其进行平方根,因此将其更改为sqrt(nums[i])+1. 这可能会稍微提高您的算法速度。

于 2013-04-06T21:41:20.927 回答