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

本文共 641 字,大约阅读时间需要 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);

转载地址:http://eeuto.baihongyu.com/

你可能感兴趣的文章
c语言程序报告函数关系描述,《C语言程序设计》实验报告
查看>>
c语言while(scanf =eof),while(scanf("%d",&n)!=EOF)
查看>>
计算机二级c语言编程题评分标准,计算机二级C语言题型和评分标准
查看>>
c语言自定义函写计算器,C语言实现计算器功能
查看>>
C语言猜电脑随机数源代码,c语言(随机数)的问题
查看>>
鸿蒙os相机,鸿蒙os有什么功能-有什么特殊之处
查看>>
微信html5图片裁切,微信小程序图片裁剪工具we-cropper
查看>>
小学生学计算机flash,利用Flash软件进行小学电脑绘画教学
查看>>
html form 与table,form和table的区别
查看>>
【原创】MySQL 模拟Oracle邻接模型树形处理
查看>>
SSD上如何进行数据保护?
查看>>
Verizon:2012年数据破坏调查报告
查看>>
今日你以老师为荣,明日老师以你为荣!
查看>>
华为交换机VRP用户界面配置及Telnet登录实验
查看>>
Cobbler无人值守安装系统史上最细实践文档
查看>>
第11章代码《跟老男孩学习Linux运维:Shell高级编程实战》
查看>>
一个资深系统管理员的O2O实践(二)
查看>>
ovs-vsctl emer-reset一个需要慎用的命令
查看>>
LVM配置与管理
查看>>
PIX8.0与两个PIX8.0建立L2L ***
查看>>