c++ - 计算 3 个数的平方和的组合的算法

标签 c++ algorithm

这是我关于堆栈溢出的第一篇文章,我想要一些帮助我正在尝试为我的 c++ 类编写算法并且不太熟悉英语数学术语,我发现很难在网上搜索这样的东西。我需要计算 3 个平方数之和的所有不同可能组合,例如 <= 比一个设定数

`x^2+y^2+z^2 <= n^2`

例如

  • 如果n=1,那么可能的组合是

    (x=0  y=0  z=1),
    (x=0  y=1  z=0),
    (x=1  y=0  z=0)
    
  • 如果n=2那么可能的组合就是前面的所有加

    (x=0 y=1 z=1)
    (x=1 y=1 z=0)
    (x=1 y=0 z=1)
    (x=2 y=0 z=0)
    (x=0 y=2 z=0)
    (x=0 y=0 z=2)
    

我确实必须对 n=100 做同样的事情,发现很难制作 3 个循环来产生这个序列并覆盖每个组合,以及计数器来计算它们并将它们打印在屏幕上。

我的代码是这样的:

int i,j,k,pl=0;
for (i=0; i<=100; i++) // last digit
{
    if (i==k)
        k=k-1;
    if (i*i+j*j+k*k<=100*100)
    {
        pl++;
        cout<<k<<"  "<<j<<" "<<i;
    }
    for(j=0; j<=i; j++) //second digit
    {
        if (j==i)
            i=i-1;
        if (i*i+j*j+k*k<=100*100)
        {
            pl++;
            cout<<k<<"  "<<j<<" "<<i;
        }
        for(k=0; k<=j; k++) //first digit
        {
            if (k==j)
                j=j-1;
            if (i*i+j*j+k*k<=100*100)
            {
                pl++;
                cout<<k<<"  "<<j<<" "<<i;
            }
        }
    }
}

目前,它陷入了无限循环。

最佳答案

ij<枚举ijk的所有不同组合/em>,k 介于 0 和 100 之间:

for (i = 0; i <= 100; ++i)
for (j = i; j <= 100; ++j)
for (k = j; k <= 100; ++k)
  {
     // Do something with i, j, and k
  }

注意:这给出了所有不同的组合。例如,在它枚举了组合 i = 0, j = 1, k = 2 之后它不会产生 i = 2, j = 0, k = 1 因为 0 1 2 和 2 0 1 不是不同的组合。

如果你想要所有组合,而不消除重复,那么三个普通循环显然就足够了:

for (i = 0; i <= 100; ++i)
for (j = 0; j <= 100; ++j)
for (k = 0; k <= 100; ++k)
  {
     // Do something with i, j, and k
  }

关于c++ - 计算 3 个数的平方和的组合的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41755966/

相关文章:

c++ - clang 的 'range-loop-analysis' 诊断是关于什么的?

c++ - 指针转换为 64 位环境中的长移植问题

algorithm - 获取第 k 组未排序的结果列表,每组具有任意数量的结果

c++ - 使用 Eigen 类对 vector 中的某些数字求和

c++ - 在保持常量的同时强制非空

c - 如何降低遍历字符串的时间复杂度?

javascript - 如何使用 JavaScript 排序对树 JSON 对象进行双重排序?

arrays - 简单 k 数组合并的复杂性

java - 前 1000 个素数之和不正确?怎么了?

c++ - vector 删除调用了错误的析构函数