【题目】

给一个集合array,包含n个数。
规定集合的"值"为集合中所有元素的和。
求该集合的所有子集的值的和。

【示例】

数组[1,2]
它的子集有空集[],[1],[2],[1,2]
子集各自的值为0,1,2,3
所以子集值的和为0+1+2+3=6

【解法一】
思路:简单暴力的方法就是穷举数组所有的子集,然后逐个求子集的值,然后相加得到最终的结果。

缺点:时间复杂度高,每个集合的子集个数为2^n个。

实现:
太麻烦了,不实现了。

【解法二】
思路:通过计算每个元素在求和过程中出现的次数,尝试获取一种规律。

[1]==> 0+1=1 // 1出现一次
[1,2]==>0+1+2+(1+2)=6 // 1出现2次,2出现2次
[1,2,3]===>0+1+2+3+(1+2)+(1+3)+(2+3)+(1+2+3)=24 // 1,2,3出现4次

由于集合中元素具有无序性, 所以集合中每个元素在子集中出现的次数是相同的。这样的话,问题就简单了,求所有子集元素的和就可以简化为求每个元素在子集中出现的次数*全集中所有元素的和。全集中所有元素的和好求,就是n*(n+1)/2。

集合中任何一个元素出现的次数,比如1,我们可以这样来求:

首先一个集合的子集个数是2n,这个都学过,我就不推导了。

我们想求 1 出现 的次数,不好求,我们可以转化为求 1 不出现的次数,1 不出现的次数就是原来集合中除了元素 1 的元素的集合的子集个数。不明白??举个例子

{1,2,3,4}这个集合子集的个数是24,除去 1 之后集合就变为 {2,3,4}这个集合的子集个数是23,也就是说只有这些集合中没有 1 ,我们想求的 1 出现的个数就是24-23

所以在含n个元素的集合中,任何一个元素在子集中出现的次数就是2n-2n-1=2n-1

所以集合中所有元素之和sum=(n*(n+1)/2)*(2n-1)

好像有点规律了,每个元素在求和过程中出现的次数是一样的。假设出现的次数是N

sum = (1+2+3+4+...+n) * N

N的值又和数组的长度有关系,N=2^(n-1)

sum = (1+2+3+4+...+n) * 2^(n-1)

【实现】

#include<stdio.h>#include<math.h>int main(){int n,sum;printf("输入数字 N : "); scanf("%d",&n);sum=pow(2,n-1)*(n*(n+1)/2);printf("和为%d\n",sum);
}

集合中所有子集元素之和相关推荐

  1. set集合判断集合中是否有无元素_集合 (Set) | 一山不容二虎的 Python 数据类型

    点击上方"可乐python说"关注公众号,点击右上角 "..."选择"设为星标"第一时间获取最新分享! 前言 Hi,大家好,我是可乐, 今天 ...

  2. set集合判断集合中是否有无元素_Python基础学习笔记(五)集合与字典

    本节知识大纲: 集合 字典 一.Set 集合的概念 1. set 集合的性质 set 集合是一组无序的且不能重复的集合,打印 set 集合时会自动消除重复的元素项: set 集合用大括号表示: set ...

  3. 【Java面试题】54 去掉一个Vector集合中重复的元素

    在Java中去掉一个 Vector 集合中重复的元素 1)通过Vector.contains()方法判断是否包含该元素,如果没有包含就添加到新的集合当中,适用于数据较小的情况下. import jav ...

  4. python随机抽号_随手小代码——Python 从集合中随机抽取元素

    =================================版权声明================================= 版权声明:原创文章 谢绝转载 请通过右侧公告中的" ...

  5. 【Groovy】集合遍历 ( 调用集合的 every 方法判定集合中的所有元素是否符合闭包规则 | =~ 运算符等价于 contains 函数 | 代码示例 )

    文章目录 一.调用集合的 every 方法判定集合中的所有元素是否符合闭包规则 二.代码示例 一.调用集合的 every 方法判定集合中的所有元素是否符合闭包规则 集合的 every 方法 , 用于 ...

  6. python随机取列表元素_python random从集合中随机选择元素

    Mysql 全文索引 1创建一个带全文索引的表: 2查看表结构: 3,使用:SEELCT * FROM XXXX WHERE MATCH(FIELD) AGAINST ('...'); 注意:FULL ...

  7. java——定义一个功能将ArrayList 集合中的重复元素删除(java集合七)

    定义一个功能将ArrayList 集合中的重复元素删除 ArrayList 集合中是允许储存重复元素的 import java.util.ArrayList; import java.util.Ite ...

  8. Redis 中的 集合(Set)SREM:从集合中移除元素 忽略不存在的元素

    这里写目录标题 5.2 SREM:从集合中移除元素 5.2.1 忽略不存在的元素 5.2.2 其他信息 参考目录 5.2 SREM:从集合中移除元素 通过使用SREM命令,用户可以从集合中移除一个或多 ...

  9. python删除元素del 可以删除部分元素吗_可以使用del删除集合中的部分元素。

    [判断题]Python集合可以包含相同的元素.(3.0分) [单选题]student = dict(姓名='张三', 年龄=20, 性别='男'),则student.get("name&qu ...

最新文章

  1. react引入多个图片_重新引入React:v16之后的每个React更新都已揭开神秘面纱。
  2. 3分钟搞定静态出接口
  3. ubuntu 12.04 配置LAMP
  4. numpy基础(part13)--排序
  5. SAP ABAP OData uri type为metadata的请求处理逻辑
  6. Android—屏幕适配和卡顿优化
  7. java proguard 使用_一步步教你使用Proguard混淆Java源代码
  8. 模板:拉格朗日插值(多项式)
  9. pandas绘图_pandas与seaborn可视化对比小案例
  10. 二本 计算机专业2017分数线,2017年二本心理学专业大学排名及分数线
  11. VMvare虚拟机如何删除安装的ubuntu操作系统
  12. 简答如何做项目的测试经理!!!
  13. MATLAB 格拉布斯准则代码
  14. mobi文件怎么转化为PDF
  15. 计算机音乐制作旋律教学,旋律创作的基本规律 管窥小学音乐旋律创作教学
  16. Git之版本回退与前进
  17. Web标准概念--摘抄《CSS布局实录》
  18. 高等数学期末总复习DAY18.常数项级数、正项级数、交错级数、绝对收敛
  19. win下海康工业相机使用python读取视频并转换成cv格式
  20. python里面的爬虫爬取网页

热门文章

  1. RabbitMQ入门4:生产者、消费者演示;多个消费者平均压力、公平派遣;
  2. SLAM中状态估计优化退化问题(degraded optimization problem)浅析和源码实现
  3. Points-To Analysis
  4. 小程序截取字符串后三位
  5. 国外知名RedSocks的专家是如何看待勒索软件WannaCry
  6. C# wpf无法打开osk.exe解决方法
  7. mysql 小彬实战命令
  8. 10 栅格的使用(3)
  9. [经典文章翻译]A Crash Course on the Depths of Win32 Structured Exception Handling
  10. Photoshop文字之——模仿书法字