| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 376 人关注过本帖
标题:怎样将数据分组呢
只看楼主 加入收藏
Topsail
Rank: 2
等 级:论坛游民
帖 子:18
专家分:13
注 册:2015-4-21
结帖率:83.33%
收藏
已结贴  问题点数:10 回复次数:2 
怎样将数据分组呢
将1、2、3、4、5、6、7、8、9九个数字分成三组,每个数字只能用一次,即每组三个数不许有重复数字,也不许同其它组的三个数字重复。
我希望能把分组结果输出来,但完全没思路。我新学,请多指教。
2015-05-31 15:08
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:5 
作业题吧,因为上次有人问 15个数据3个一组 怎么做

程序代码:
#include <stdio.h>
#include <string.h>
#include <stdbool.h>

static unsigned mask_next( unsigned mask[], unsigned val )
{
    size_t r;
    for( r=val; mask[r]==0; ++r );
    mask[r] = 0;
    return r;
}

bool next( size_t n, size_t m, unsigned a[] )
{
    for( size_t i=n-1-m; i!=0; --i, i-=(i!=0 && i%m==0) )
    {
        if( a[i] < a[i/m*m+2*m-1] )
        {
            size_t t = i/m*m+2*m-1;
            for( size_t j=i/m*m+m; j!=n; ++j )
                if( a[j]>a[i] && a[j]<a[t] )
                    t = j;

            unsigned tmp = a[i];
            a[i] = a[t];
            a[t] = tmp;

            if( i <  n-m-1 )
            {
                unsigned mask[n];
                memset( mask, 0, n*sizeof(mask[0]) );
                for( size_t j=i+1; j!=n; ++j )
                    mask[a[j]] = 1;

                for( size_t j=i+1; j!=i/m*m+m; ++j )
                    a[j] = mask_next( mask, a[i] );
                for( size_t j=i/m*m+m; j!=n; ++j )
                    a[j] = mask_next( mask, 0 );
            }
            return true;
        }
    }

    return false;
}

int main( void )
{
    const size_t n = 9;
    const size_t m = 3;

    unsigned cnt = 0;
    unsigned a[] = { 1,2,3,4,5,6,7,8,9 };
    for( bool b=true; b; b=next(n,m,a) )
    {
        for( size_t i=0; i!=n; ++i )
            printf( "%u%s", a[i], i+1==n?"\n":(", "+((i+1)%m!=0)) );

        ++cnt;
    }
    printf( "--- %u ---\n", cnt );

    return 0;
}

一个280个(9!/(3!^3)/3!=280)

2015-06-01 09:02
T_MACC
Rank: 4
等 级:业余侠客
威 望:8
帖 子:99
专家分:211
注 册:2015-4-14
收藏
得分:5 
求总共多少分组吗
2015-06-01 10:52
快速回复:怎样将数据分组呢
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.054020 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved