首页 > 解决方案 > 检查数组中合成图形的最大公约数的函数

问题描述

#include <iostream>
using namespace std;

int sal_sk (int sal){ // If sal is a composite figure, then  true, if its not then false.

   for (int i = 2; i <= sal; i++){
    if(sal%i==0)
    return true;}
    return false;


}
int lkd(int a,int b){ // Checks the gcd
    int c;
    while(b > 0) {
        c = b;
        b = a % b;
        a = c;
    }
    return a;

}

int main(){
int ok;

do{
    int n;//Number of elements 
    int*a; //
    int sal;


    cout<<"Put in the number of elements"<<endl;
  std::cin >> n;
    cout<<"Input"<<n<<"elements"<<endl;
  std::cin >> *a;



int *array = new int[*a];



int rez = a[0];

for(int i=1; i<n; i++) {
if(sal_sk(a[i]==true))
    rez = lkd(rez, a[i]);
delete [] array;
}

所以我有这段代码,但我看不出它为什么不起作用的问题,有人可以帮我吗?这些功能应该可以工作,所以这应该是他们的错,我认为我不太了解数组,所以我认为有问题。注释将帮助您理解代码谢谢!

标签: c++arraysfunction

解决方案


我什至不需要一直阅读到数组部分就可以看到这个程序永远不会工作。

我会给你一个线索:sal_sk总是会回来true。还有truefalse不是int

就程序的其余部分而言,它几乎是无法挽救的。您有一个开放do语句,它无处可去,main不完整,oksal变量未使用(???)。您正在尝试将cin数据转换为未初始化的指针。该new语句使用了错误的变量,而且它不在它应该在的位置。for循环从错误开始索引,1应该是0,并且if括号在错误的位置。循环体本身会破坏数组。

我建议您完全删除该main功能并从头开始。除了阅读 C++ 书籍之外,我能给你的最好建议是逐行阅读你的代码并向自己解释它的作用。如果做不到,就回去看书。

一些提示:您不需要任何do...while语句,您想在请求输入之前初始化数组,并且您想询问输入n时间。


推荐阅读