使用数组求解方程

using arrays to solve an equation

本文关键字:方程 数组      更新时间:2023-10-16

所以我用 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),现在你在那里看到的是最好的,我可以想出其他尝试或修复只是让事情变得更糟,例如崩溃或其他什么。如果你能帮忙,那就太好了,最重要的是告诉我我哪里出错了,因为这样做的全部目的是学习而不是解决问题。提前非常感谢!

您正在使用中断其中一个循环的 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;

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

  1. 正如下面的答案所述,3 个奇数加起来永远不会等于 30;
  2. 变量 I、j 和 k 必须是全局变量。因此,在循环使用之前初始化它们。那么它应该可以完美地工作(如果数字不均匀)。

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

我看到您只有奇数整数作为可能的值。 3 个奇数整数永远无法求和为像 30 这样的偶数,因此无法解决您的问题。您提供的一个解决方案将 22 作为一个值,一个偶数整数。