Wierd combination
Wierd combination
本文关键字:combination Wierd 更新时间:2023-10-16
我有一个由3个整数{1,2,3}
组成的数组。我需要以-的形式打印组合
1 1+2 1+3 1+2+3
2 2+3
3
for(int i = 0; i < array.size(); ++i)
{
for(int j = 0; (i + j) < array.size(); ++j)
{
sum += my[i + j];
cout << sum << " ";
c++;
}
cout << endl;
}
在上面,1+3
被跳过。
请帮我一下。
给定一个集合S,幂集p(S)是S的所有子集的集合。你要做的基本上是枚举x∈p(S)的所有非空元素。从那里,您可以迭代P(S)中每个非空x的所有元素。
这对你来说意味着什么?首先,对于包含n个元素的集合S,P(S)的可能元素数为2^n,因此幂集的大小与其生成集的大小成指数关系。
但是,如果这可能对n的小值(特别是n<64)有用,则可以使用unsigned long long
变量作为一种索引。特别是,每个位都对应于一个数组元素。值为0的比特在和中排除其相关联的元素,而值为1的比特将包括该元素。要做这样的事情,请尝试以下操作:
#include <vector>
#include <iostream>
void print_sum(const std::vector<int>& array, unsigned long long i) {
int sum = 0;
for (int index=0; i > 0; i=i>>1, ++index) {
if (i % 2 == 1) {
std::cout << array[index] << (i>1 ? "+" : "=");
sum += array[index];
}
}
std::cout << sum << std::endl;
}
void printer(const std::vector<int>& array) {
if (array.size() < sizeof(unsigned long long) * 8) {
unsigned long long n = 1 << array.size();
for (unsigned long long i = 1; i < n; ++i) {
print_sum(array, i);
}
}
}
int main(int argc, char** argv) {
std::vector<int> sample {1, 2, 3, 4};
printer(sample);
return 0;
}
该程序具有输出:
1=1
2=2
1+2=3
3=3
1+3=4
2+3=5
1+2+3=6
4=4
1+4=5
2+4=6
1+2+4=7
3+4=7
1+3+4=8
2+3+4=9
1+2+3+4=10
相关文章:
- 封送C++交错数组会产生"Invalid managed/unmanaged type combination"错误
- (c )我的输出.txt文件具有WIERD间距
- Cocos2d-x removeChild works wierd
- C 比较两个INT,错误或Wierd End
- Wierd行为,相同的代码在一个地方失败,主要起作用
- gettimeofday on uLinux wierd behaviour
- C++ Linux system() ouputs weird in combination with printf()
- 使用 getline() 的 Wierd 行为
- C++中getline的Wierd行为
- Wierd combination
- 2- combination c++
- unsigned short和signed short比较wierd行为
- Wierd指针构造
- 打印字符数组末尾时的Wierd结果(“210”)