我正在进行在线挑战并遇到一个问题!我已经在纸上制定了逻辑,但似乎我的问题不起作用。它只是返回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数字,这意味着数组将持续多长时间,然后检查数组中的每个数字是否为素数。我有什么想法吗?
答案 0 :(得分:2)
for(int j=1;j>=nums[i];j++)
{
...
}
好像你的循环条件错了。它应该是:
for(int j=1;j<=nums[i];j++) //Change here
{
...
}
答案 1 :(得分:2)
要检查nums[i]
是否可以按j
划分j%nums[i]==0
,但需要nums[i]%j==0
。
您的deliteli
计数器也有问题。
您需要为每个数字重新初始化它,否则它只会添加到它。
此外,您始终设置res[0]
,但您需要设置res[i]
。
答案 2 :(得分:2)
deliteli
应从0开始。
deliteli
应该在循环开始时重置。
您使用res[i]
代替res[0]
,否则您将继续覆盖第一个元素。
j%nums[i]
应为nums[i]%j
,因为a%b
会将余下的a
除以b
。
'
仅适用于单个字符(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;
}
答案 3 :(得分: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
。它可能会略微提高算法的速度。