Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 弄清楚如何循环(x个数之和=y)_Php_Algorithm - Fatal编程技术网

Php 弄清楚如何循环(x个数之和=y)

Php 弄清楚如何循环(x个数之和=y),php,algorithm,Php,Algorithm,我在这个算法问题上有点困难。假设必须使用(x)个数字,找出给定总和(y)的所有可能结果 假设我的x=3,和是60。我必须找出所有可能的情况。例如 1,1,58,1,2,57等。。。这有点复杂,但在这里并不重要 我可以算出x=2,x=3,但这是手动完成的,我需要算出如何动态完成 for ($first=$start; $first <= $highest_number; $first++) { //start = 1, highest_number = y / x which is

我在这个算法问题上有点困难。假设必须使用(x)个数字,找出给定总和(y)的所有可能结果

假设我的x=3,和是60。我必须找出所有可能的情况。例如
1,1,58
1,2,57
等。。。这有点复杂,但在这里并不重要

我可以算出x=2,x=3,但这是手动完成的,我需要算出如何动态完成

    for ($first=$start; $first <= $highest_number; $first++) { //start = 1, highest_number = y / x which is 20 in this case.
        for ($inc=$start; $inc <= $end; $inc++) { //end = 40

            if ($x>= 3) { //assuming x = 3

                for ($n=$highest_number; $n <= $end ; $n++) { 
                    if ( $first + $inc + $n == $target ) {
                        $result['result'][] = $first .",". $inc .",". $n;
                    }
                }

            } else  { // assuming x = 2
                if ($first + $inc == $target) {
                    $result['result'][] = $first .",". $inc;
                }
            }
        }
    }

for($first=$start;$first这是nHr组合,其中n=y,r=x-y

#include<iostream>
#include<map>
using namespace std;

class nHr
{
public:
    nHr(int n, int r) {
        this->n = n;
        this->r = r;
        ar = new int[r];
    }
    int* ar;
    int n, r;
    bool next() {
        ar[r-1]++;
        int i = r-1;
        while(ar[i] == n+1) {
            if(--i == -1) return false;
            ar[i]++;
        }
        while(i < r-1) ar[i+1] = ar[i++];
        return true;
    }
    int operator[](int n) {return ar[n];}
};

int main(int c, char** v)
{
    if(c < 3) return 0;
    int x = atoi(v[1]);
    int y = atoi(v[2]);
    nHr nhr(y, x-y);
    map<int, int> m;
    while(nhr.next()) {
        for(int i=1; i<=y; i++) m[i]++;
        for(int i=0; i<x-y; i++) m[nhr[i]]++;
        for(auto& a : m) cout << a.second << ',';
        cout << endl;
        m.clear();
    }
}
#包括
#包括
使用名称空间std;
nHr类
{
公众:
nHr(内部n,内部r){
这个->n=n;
这个->r=r;
ar=新整数[r];
}
int*ar;
int n,r;
布尔下一步{
ar[r-1]++;
int i=r-1;
而(ar[i]==n+1){
如果(--i==-1),则返回false;
ar[i]++;
}
而(i对于(inti=1;i这是nHr组合,其中n=y,r=x-y

#include<iostream>
#include<map>
using namespace std;

class nHr
{
public:
    nHr(int n, int r) {
        this->n = n;
        this->r = r;
        ar = new int[r];
    }
    int* ar;
    int n, r;
    bool next() {
        ar[r-1]++;
        int i = r-1;
        while(ar[i] == n+1) {
            if(--i == -1) return false;
            ar[i]++;
        }
        while(i < r-1) ar[i+1] = ar[i++];
        return true;
    }
    int operator[](int n) {return ar[n];}
};

int main(int c, char** v)
{
    if(c < 3) return 0;
    int x = atoi(v[1]);
    int y = atoi(v[2]);
    nHr nhr(y, x-y);
    map<int, int> m;
    while(nhr.next()) {
        for(int i=1; i<=y; i++) m[i]++;
        for(int i=0; i<x-y; i++) m[nhr[i]]++;
        for(auto& a : m) cout << a.second << ',';
        cout << endl;
        m.clear();
    }
}
#包括
#包括
使用名称空间std;
nHr类
{
公众:
nHr(内部n,内部r){
这个->n=n;
这个->r=r;
ar=新整数[r];
}
int*ar;
int n,r;
布尔下一步{
ar[r-1]++;
int i=r-1;
而(ar[i]==n+1){
如果(--i==-1),则返回false;
ar[i]++;
}
而(i对于(int i=1;i递归似乎是一种方法。选择结果中的第一个数字,将其从
y
中减去,然后使用
y=y-first
x=x-1
递归。当
y
时停止。然后使用不同的第一个数字重复。x嵌套循环-生成一个数组,其中子数组都具有像y一样的长度xlook^x循环迭代(假设1,59与59,1不同),除非我误解了您试图执行的操作。请选择结果中的第一个数字,从
y
中减去它,然后使用
y=y-first
x=x-1
递归。当
y
时停止。然后使用不同的第一个数字重复。x嵌套循环-生成一个数组,其中subarray都有长度xlook,比如y^x循环迭代(假设1,59与59,1不同),除非我误解了您的意图