博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法作业:求一个集合中所有子集元素之和
阅读量:6812 次
发布时间:2019-06-26

本文共 821 字,大约阅读时间需要 2 分钟。

问题描述:

求一个集合中所有子集元素之和。如{1,2,3,4,5,6,7,8,9,10……n}

算法分析:

由于集合中元素具有无序性, 所以集合中每个元素在子集中出现的次数是相同的。这样的话,问题就简单了,求所有子集元素的和就可以简化为求每个元素在子集中出现的次数*全集中所有元素的和。全集中所有元素的和好求,就是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)

代码实现:

#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);


博主ma6174对本博客文章(除转载的)享有版权,未经许可不得用于商业用途。转载请注明出处

对文章有啥看法或建议,可以评论或发电子邮件到ma6174@163.com


本文转自ma6174博客园博客,原文链接:http://www.cnblogs.com/ma6174/archive/2012/03/03/2378095.html
,如需转载请自行联系原作者
你可能感兴趣的文章
ionic3 UI Components学习4:Button 按钮
查看>>
highcharts实现饼状图
查看>>
npm常用命令集合
查看>>
6. Java 中的基本数据类型 【连载 6】
查看>>
three.js简介 —— 3D框架
查看>>
MySQL - 索引详解
查看>>
比特币:交易的数据结构
查看>>
基于vue-electron的小项目
查看>>
【收藏】15个常用的javaScript正则表达式
查看>>
大数据可视化 - 收藏集 - 掘金
查看>>
尤大低仿博客带回家
查看>>
库,组件,框架 - 收藏集 - 掘金
查看>>
vue server render实践
查看>>
PHP各大支付平台在线支付集成源码
查看>>
你的GitHub,怎么和我用的不太一样?
查看>>
为什么AppDynamics重构指标服务时选择了HBase而不是别的NOSQL
查看>>
Android多线程源码详解一:handler、looper、message、messageQueue
查看>>
SaaS加速器II 能力中心:互利互补 共享商业红利
查看>>
病毒木马防御与分析实战
查看>>
分布式工作流任务调度系统Easy Scheduler正式开源
查看>>