使用数组来求解方程

时间:2016-03-13 19:43:22

标签: c++ arrays

所以我用c ++编写了这段代码来解决这个等式(x + y + z = 30),其中每个变量都有一定数量的可能值(1,3,5,7,9,11,13) ,15)所以允许重复,这是我的代码:

#include <iostream>

using namespace std;

int main()
{

int x[8]={1,3,5,7,9,11,13,15};
int y[8]={1,3,5,7,9,11,13,15};
int z[8]={1,3,5,7,9,11,13,15};
    for (int i=0; i<8; i++)
    {

        for (int j=0; j<8; j++)
        {

            for (int k=0; k<8; j++)

            {

                if (x[i]+y[j]+z[k]==30)
                {
                   cout << x[i] << "\n" << y[j] << "\n" << z[k]<< "\n"<< endl;
                   break;
                }


            }
        }
    }

}

现在我不知道这是否是接近它的正确方法(我是初学者)但是这个程序仍然没问题,因为它给出了三个等于30的数字,但它并没有坚持可能的值,例如(7,22,1),现在你看到他们是最好的我可以想出其他的尝试或修复只是让事情变得更糟,例如崩溃或者什么如此。 如果你可以帮助那将是伟大的,最重要的是告诉我哪里出错了,因为这样做的目的是学会不解决问题。 非常感谢你!

2 个答案:

答案 0 :(得分:1)

您正在使用 break 语句,该语句只会断开其中一个循环。你的程序中有嵌套循环,所以我建议你改用 goto:

for (int i=0; i<8; i++)
  {
   for (int j=0; j<8; j++)
    {
        for (int k=0; k<8; j++)<----- it should  be k++ 
        {
            if (x[i]+y[j]+z[k]==30)
            {

               goto stop;
            }
        }
     }
   }

  stop:  
  cout << x[i] << "\n" << y[j] << "\n" << z[k]<< "\n"<< endl;

我实际上运行了代码,还有两个问题:

  1. 如下面的答案所述,3个奇数从不加起来为30;
  2. 变量i,j和k需要是全局变量。因此在使用循环之前初始化它们。然后它应该完美地工作(如果数字不均匀)。

答案 1 :(得分:1)

我在初始化数组的值中没有看到22。您也可以使用一个具有可能值的数组;不需要3个阵列。

我看到你只有奇数整数作为可能的值。 3个奇数的整数永远不能总和为30的偶数,所以没有解决你的问题。您提供的一个解决方案有22个作为一个值,一个偶数。