C++ 有人能告诉我为什么程序最后不返回任何int k吗?

C++ 有人能告诉我为什么程序最后不返回任何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) {

我正在做这个练习:给出一个由n个整数组成的序列,每个整数不大于1000(绝对值)。写程序除数,它发现给定整数中有多少个具有以下属性:整数被m个正除数(每个除数不应等于1,也不应等于整数本身)整除

结果应该如下所示: 输入:7 4
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; }