首页 > 其他分享 >对于从1到N的连续整数集合,能划分成两个子集合,且保证每个集合的数字和是相等的。

对于从1到N的连续整数集合,能划分成两个子集合,且保证每个集合的数字和是相等的。

时间:2022-12-01 18:06:03浏览次数:37  
标签:int 子集合 void 整数 num exit DynamicClass 集合 include

#include<iostream>
#include<vector>
#include<cstdlib>
using namespace std;const int Max=10000;
class DynamicClass
{
private:
int n; //n表示{1,2,3,...n}
long s; //表示1+2+...+n
vector<int>v; //v[i]表示累加和是i的组合数,如v[3]=2表示{1,2},{3}两种组合
public:
DynamicClass();
void Divide(int &num); //num表示有多少种分法
};DynamicClass::DynamicClass()
{
int x;
cout<<"请输入N:";
cin>>x;
if(!cin.good())
{
cerr<<"输入格式错误!"<<endl;
exit(0);
}
if(x>=Max || x<=0)
{
cerr<<"输入的值应该在0到"<<Max<<"之间!"<<endl;
exit(0);
}
this->n=x;
this->s=n*(n+1)/2;
if(s%2)
{
cerr<<"不能划分成值相等的两个子集合!"<<endl;
exit(0);
}
int i;
for(i=0;i<=s;i++) this->v.push_back(0);
this->v[0]=1; //很重要
}void DynamicClass::Divide(int &num)
{
int i,j;
int k=s/2; //k是每个子集合所有值之和
for(i=1;i<=this->n;i++) //将第1,2,...n个元素依次取出
{
for(j=k;j>=i;j--)
{
this->v[j]+=this->v[j-i]; //动态规划,后一阶段取决于前一阶段
}
for(int t=1;t<=k;t++) cout<<this->v[t]<<" ";
cout<<endl;
}
num=this->v[k]/2;
}void main()
{
DynamicClass dc;
int num=0;
dc.Divide(num);
cout<<"有"<<num<<"种分法"<<endl;
}

标签:int,子集合,void,整数,num,exit,DynamicClass,集合,include
From: https://blog.51cto.com/u_15899033/5903531

相关文章

  • leetcode倒转整数--snprintf性能不行
    #include<stdio.h>#include<string.h>#include<iostream>#include<limits>intreverse(intx){longsum=0;while(x){sum=sum*10+x%10;......
  • 第一章 Java集合框架
    -----------------------------------------------------------------------------Java集合框架(一)-ArrayList 大佬理解->Java集合之LinkedList1、ArrayList的特点......
  • PYTHON 数据结构 - 集合
    1.1集合是一种可迭代的,无序的,不能包含重复元素的数据结构。集合的元素是不可变的,如:int,float,string,tuple等,可变的内容不可以是集合的元素,如:list,dict,set等。集......
  • 每日算法之调整数组顺序使奇数位于偶数前面(一)
    JZ21调整数组顺序使奇数位于偶数前面(一)描述输入一个长度为n整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前面部分,所有的偶数位于数组的......
  • 集合
    集合集合概述数组其实就是一个集合。集合实际上就是一个容器。可以来容纳其它类型的数据。集合为什么说在开发中使用较多?集合是一个容器,是一个载体,可以一次容纳多个对......
  • 上帝与集合的正确用法——欧拉定理
    上帝与集合的正确用法题目描述根据一些书上的记载,上帝的一次失败的创世经历是这样的:第一天,上帝创造了一个世界的基本元素,称做元。第二天,上帝创造了一个新的元素,称作\(......
  • 7-6 字符串中的十六进制整数转换成十进制整数
    问题输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果在第一个十六进制字......
  • 【C语言】【指针】输入三个整数,按大小输出
    #include <stdio.h>intmain(){ void exchange(int*p1,int*p2,int*p3); //函数声明// inta,b,c,*p1,*p2,*p3; printf ("Pleaseentera,b,c:\n"); ......
  • Java 集合框架2:List
    目录List1.概述2.功能拓展位置访问搜索迭代范围视图3.实现ArrayList实现原理CopyOnWriteArrayListLinkedList实现原理List1.概述List是一个有序序列,除了继承了Collect......
  • 用递归函数实现反序输出正整数
    大家下午好呀,今天的分享就是我的作业啦,可能对一些大佬来说很基础,但是我经过综合多方意见,终于写出来啦首先是题目然后我们分析下这道题,一开始我是很懵逼的,不知道老师为啥要说......