算法作业:求一个集合中所有子集元素之和

简介:

问题描述:

求一个集合中所有子集元素之和。如{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对本博客文章(除转载的)享有版权,未经许可不得用于商业用途。转载请注明出处http://www.cnblogs.com/ma6174/

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


本文转自ma6174博客园博客,原文链接:http://www.cnblogs.com/ma6174/archive/2012/03/03/2378095.html ,如需转载请自行联系原作者
相关文章
|
2月前
|
算法
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
|
1月前
|
算法 调度
作业调度算法_先来先服务算法_短作业优先算法_高响应比优先算法
本文介绍了作业调度算法,包括先来先服务(FCFS)、短进程优先(SJF)和高响应比优先(HRRN)算法。通过分析进程的到达时间和所需CPU服务时间,计算进程的开始时间、完成时间、平均周转时间和平均带权周转时间,以评估不同算法的性能。FCFS适合长作业,SJF适合短作业,而HRRN则综合了两者的优点。
62 12
|
2月前
|
算法
算法设计与分析作业
这篇文章是关于算法设计与分析的作业,其中包含了两个算法实现:一个是使用分治算法实现的十进制大整数相乘(包括加法、减法和乘法函数),并进行了正确性和健壮性测试;另一个是使用快速排序思想实现的分治查找第K小元素的程序,并分析了其平均和最坏时间复杂度。
算法设计与分析作业
|
4月前
|
算法
数据结构和算法学习记录——习题-移除链表元素
数据结构和算法学习记录——习题-移除链表元素
23 0
|
2月前
|
DataWorks 算法 调度
B端算法实践问题之配置脚本以支持blink批处理作业的调度如何解决
B端算法实践问题之配置脚本以支持blink批处理作业的调度如何解决
32 1
|
2月前
|
算法
突击面试:解密面试官的算法题集合
突击面试:解密面试官的算法题集合
|
4月前
|
存储 算法 Java
Java查找算法概览:二分查找适用于有序数组,通过比较中间元素缩小搜索范围;哈希查找利用哈希函数快速定位,示例中使用HashMap存储键值对,支持多值关联。
【6月更文挑战第21天】Java查找算法概览:二分查找适用于有序数组,通过比较中间元素缩小搜索范围;哈希查找利用哈希函数快速定位,示例中使用HashMap存储键值对,支持多值关联。简单哈希表实现未涵盖冲突解决和删除操作。
45 1
|
4月前
|
算法
【经典LeetCode算法题目专栏分类】【第10期】排序问题、股票问题与TOP K问题:翻转对、买卖股票最佳时机、数组中第K个最大/最小元素
【经典LeetCode算法题目专栏分类】【第10期】排序问题、股票问题与TOP K问题:翻转对、买卖股票最佳时机、数组中第K个最大/最小元素
|
4月前
|
算法 Java
Java数据结构与算法:用于处理不相交集合的合并和查找问题
Java数据结构与算法:用于处理不相交集合的合并和查找问题
|
4月前
|
算法 搜索推荐 C++
C++之STL常用算法(遍历、查找、排序、拷贝、替换、算数生成、集合)
C++之STL常用算法(遍历、查找、排序、拷贝、替换、算数生成、集合)