c语言编程,集合

Python011

c语言编程,集合,第1张

动态规划.

#include <stdio.h>

/*#include <stdlib.h>*/

#include <memory.h>

#define N 5050

int main(int argc, char* argv)

{

    int d[N]

    int n,s

    while(scanf("%d",&n)!=EOF) {

        s=n*(n+1)>>1

        if(s&1) {

            printf("0\n")

        }

        else {

            s=s>>1

            int i,j

            memset(d,0,N*sizeof(d[0]))

            d[0]=1

            for(i=1i<=ni++) {

                for(j=sj>=ij--) {

                    d[j] = d[j] + d[j-i]

                }

            }

            printf("%d\n",d[s]>>1)

        }

    }

    return 0

}

C语言中既没有逻辑类型也没有集合类型。

在C++和VB里有逻辑类型,C++中为bool,VB中为

Boolean。其值有true和

false两种,true代表真,false代表假。

C语言没有逻辑类型,如果要表示逻辑类型,只能用整型值代替。0代表false,非0代表true。

集合是一种元素间无序的类型。C语言没有集合类型。

(注意:数组不算集合类型,因为数组元素之间有前驱和后继关系。)

最简单的是bit set(又称为Bit array、bit vector),例如用 typedef unsigned bitset[N / sizeof(unsigned)]表示一个集合(其全集的元素量为N),每个bit代表某个元素是否存在于该集合中。

这个数据结构的好处是,可用位操作(&、|、~)实现并集、交集、补集,非常适合计算机运作。

缺点是空间和时间复杂度和全集的元素数量 N 成正比,而不是集合实际的元素量。例如全集是32位整数,每个集合就需要2^32 bit = 512MB的空间。如果集合中的元素比较少,可以使用有序序列,例如排序数组(Sorted array)、二叉查找树等实现集合。它们的缺点是修改集合不是常数时间。

数据类型关键字

short:修饰int,短整型数据,可省略被修饰的int。(K&R时期引入)

long:修饰int,长整型数据,可省略被修饰的int。(K&R时期引入)

long long:修饰int,超长整型数据,可省略被修饰的int。(C99标准新增)

signed:修饰整型数据,有符号数据类型。(C89标准新增)

unsigned:修饰整型数据,无符号数据类型。(K&R时期引入)

restrict:用于限定和约束指针,并表明指针是访问一个数据对象的初始且唯一的方式。