Php 弄清楚如何循环(x个数之和=y)
我在这个算法问题上有点困难。假设必须使用(x)个数字,找出给定总和(y)的所有可能结果 假设我的x=3,和是60。我必须找出所有可能的情况。例如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
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不同),除非我误解了您的意图