从64个数中找四组4个数之和差最小算法实现

从64个数中找出16个数,将16个数分成4个小组,要求每个小组数字之和的差最小。

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7554884
  • 你也可以参考下这篇文章:燕山大学课程设计源码______基于单片机试验板设计一个电子跑表系统,用按钮启动和停止,能够实现最多59分59秒的跑表,在数码管上显示当前的跑表时间值;
  • 除此之外, 这篇博客: 【每天学一点系列~】一文带你彻底弄懂结构体大小和内存对齐中的 对齐规则4 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 4、如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。

    意思就是说,结构体如果有嵌套,那么我们把他单独地看作一个变量,对于它的最大对齐数的分析方法依据上述的三个对齐法则,那么这个结构体类型成员的大小就是它本身的大小,对齐数就是它本身的最大对齐数。

    还是用例题说话:

    struct A
    {
    	char a;
    	int b;
    	char c;
    }A;
    struct B
    {
    	int a;
    	struct A b;
    	char c;
    };
    

    我们算这个结构体B的大小(注意,它的成员中嵌套了一个结构体A)
    我们看结构体B的第一个成员a,它直接对齐到0偏移量处:
    在这里插入图片描述
    第二个成员b,它的类型为struct A,对齐数为4(4是它自己的最大对齐数),大小为12(这个是我们上面分析过的那个结构体,所以直接列出对齐数与大小),所以它的存放位置就是:
    在这里插入图片描述
    最后成员c,由于是char类型,所以对齐数=min{sizeof(char),默认对齐数8}=1,所以——
    在这里插入图片描述
    最终我们得到,这个结构体占据了偏移量为0~16的这17个内存单元,由于成员a,b,c的对齐数分别为4,4,1,所以取最大对齐数为三者的最大值:4,最终我们的结构体B的大小为大于等于17且为4的倍数的最小整数,即:20;
    VS编译器下运行:
    在这里插入图片描述
    答案正确!

  • 您还可以看一下 曹红杏老师的软件测试2小时入门课程中的 黑盒测试用例设计方法 正交表法小节, 巩固相关知识点