C++ 有人能告诉我为什么程序最后不返回任何int k吗?
我正在做这个练习:给出一个由n个整数组成的序列,每个整数不大于1000(绝对值)。写程序除数,它发现给定整数中有多少个具有以下属性:整数被m个正除数(每个除数不应等于1,也不应等于整数本身)整除 结果应该如下所示: 输入:7 4C++ 有人能告诉我为什么程序最后不返回任何int k吗?,c++,algorithm,boolean,C++,Algorithm,Boolean,我正在做这个练习:给出一个由n个整数组成的序列,每个整数不大于1000(绝对值)。写程序除数,它发现给定整数中有多少个具有以下属性:整数被m个正除数(每个除数不应等于1,也不应等于整数本身)整除 结果应该如下所示: 输入:7 4 62016410245024 输出:3 说明:给定序列中正好有4个除数的元素是20、12和50 这是我的代码: #include <iostream> using namespace std; bool divisors(int a, int m) {
62016410245024
输出:3
说明:给定序列中正好有4个除数的元素是20、12和50 这是我的代码:
#include <iostream>
using namespace std;
bool divisors(int a, int m) {
int br = 0;
for (int i = 2; i < a; ++i) {
if (a % i == 0)br++;
if (br == m) return 1;
else return 0;
}
}
int main() {
int n; // the number of elements
int m; // the number of divisors
int a, i, k = 0;
cin >> n >> m;
for (i = 1; 1 <= n; i++) {
cin >> a;
if (divisors(a, m)) k++;
}
cout << k << endl;
return 0;
}
#包括
使用名称空间std;
布尔除数(整数a,整数m){
int br=0;
对于(int i=2;i>n>>m;
对于(i=1;1>a;
if(除数(a,m))k++;
}
(i=1;i>a;
if(除数(a,m))k++;
}
- 主要问题是你的devisor函数。像这样更新它
bool divisors(int a, int m) { int br = 0; for (int i = 2; i < a; ++i) { if (a % i == 0)br++; } if (br == m) return 1; else return 0; }
bool除数(int a,int m) { int br=0; 对于(int i=2;i
- 在for循环完成之前,您正在从函数返回
返回0
时,你希望它实际返回k,或者其他什么?它实际上不打印任何内容:/k基本上应该返回4,如果你运行我在简介中编写的示例输入,50正好可以除以4?真的吗?@SagarPatel不傻!:)50正好有4个除法器:2,25,10,5。是啊,我想知道布尔部分出了什么问题,非常感谢!:D这是正确的解决方案:#包括使用名称空间std;布尔除数(inta,intm){intbr=0;for(inti=2;I>n>>m;for(i=1;i>a;if(除数(a,m))k++}由于某些原因,可能是因为特定的情况似乎没有任何区别,但也会更新这部分,谢谢!:在您当前发布的代码中,如果您使用paranthesis运行For循环,那么它将始终给出零结果。啊,是的,显然在运行Viktor t的备注之前,我已经修改了它,更改了括号o for(int i=2;ibool divisors(int a, int m)
{
int br = 0;
for (int i = 2; i < a; ++i)
{
if (a % i == 0)br++;
}
if (br == m) return 1;
else return 0;
}