| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1194 人关注过本帖, 1 人收藏
标题:还是老问题,请各位帮忙!
只看楼主 加入收藏
zhou31146001
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:303
专家分:131
注 册:2012-11-28
收藏
得分:0 
以下是引用wp231957在2014-4-21 11:21:36的发言:


第一个问题你有代码没   我对全排列不咋熟悉  你有现成代码最好
第二个问题不是问题
第三个问题没有办法


我也没有代码。
只有最上面那个程序,是以1为间隔计算8模体中每种8模体出现次数的。
但这个程序无法以2、3、4、5等为间隔。
2014-04-21 11:35
裙下之臣
Rank: 1
等 级:新手上路
帖 子:13
专家分:4
注 册:2013-11-3
收藏
得分:0 
2014-04-21 11:36
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9008
专家分:53957
注 册:2011-1-18
收藏
得分:0 
没看懂,说明中说是“八模体”,代码中似乎为“9模体”,你到底要什么?

难道你要 以k为间隔的n模体?
如是的话,限制条件是什么?
0<k<=n?
n有没有什么限制,比如n<100?
2014-04-21 12:00
zhou31146001
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:303
专家分:131
注 册:2012-11-28
收藏
得分:0 
以下是引用rjsp在2014-4-21 12:00:07的发言:

没看懂,说明中说是“八模体”,代码中似乎为“9模体”,你到底要什么?

难道你要 以k为间隔的n模体?
如是的话,限制条件是什么?
0<k<=n?
n有没有什么限制,比如n<100?

 
因为我要做k模体的(k取30以内的任意数)。

因为每[i,i+7]区域位置上的8个字符就是一个8模体,i从0开始,直到字符串结束。以1为间隔,则i是i++形式的;以2为间隔,则i是i+=2逐渐增加的,依此类推。
2014-04-21 13:49
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9008
专家分:53957
注 册:2011-1-18
收藏
得分:0 
好累呀,听不懂

题目中说八模体,代码中是9模体
问你后,回答说k模体,“因为”后却是八模体

最后一次,是要“以k为间隔的8模体”,还是“以k为间隔的9模体”,还是“以k为间隔的n模体”?
2014-04-21 14:03
zhou31146001
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:303
专家分:131
注 册:2012-11-28
收藏
得分:0 
以下是引用rjsp在2014-4-21 14:03:21的发言:

好累呀,听不懂

题目中说八模体,代码中是9模体
问你后,回答说k模体,“因为”后却是八模体

最后一次,是要“以k为间隔的8模体”,还是“以k为间隔的9模体”,还是“以k为间隔的n模体”?

对不起,是我说的太含糊了。
是以k为间隔的n模体。
2014-04-21 16:03
zhou31146001
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:303
专家分:131
注 册:2012-11-28
收藏
得分:0 
以下是引用rjsp在2014-4-21 14:03:21的发言:

好累呀,听不懂

题目中说八模体,代码中是9模体
问你后,回答说k模体,“因为”后却是八模体

最后一次,是要“以k为间隔的8模体”,还是“以k为间隔的9模体”,还是“以k为间隔的n模体”?

k无限制,且k与n无关系。n取20以内任意值。
2014-04-21 16:05
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
在网上找到了一个符合你这个需求的全排列代码

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

int count=0;

/*

 * 加1后进位操作 

 * 用字符串模拟数字的进位操作

 */
void add_one(int *array, int array_len, int radio, int *flow)
{
        int i;
        for ( i=array_len-1; i>=0; i-- )
        {
                array[i] += 1;
                //没有进位就退出
                if (array[i] < radio) return; else array[i] = 0;                        
        }
        // 最高位溢出 - 标志进位操作已经结束
        (*flow) = 1;
}

/*

 * 获取全排列 

 */
int get_pailie(char *set, int set_len, int sub_len, char *out, int out_len)
{
        int  end_flag = 0;
        int *array    = NULL;
        int  i = 0;
        if ( NULL==set || NULL==out || out_len<sub_len ) return -1;
        if ( (array=(int *)malloc(sub_len * sizeof(int))) == NULL ) return -2;
        // 初始化整数集合为0
        for( i=0; i<sub_len; i++ )  array[i] = 0;
        while( 1 != end_flag )
        {
                for(i=0; i<sub_len; i++)out[i] = set[array[i]];// 输出结果的每一位与它对应的数的每一位相同
                printf("%9s", out);
                if(count%8==0) printf("\n");
                count++;
                // 下标+1
                add_one(array, sub_len, set_len, &end_flag);
        }
        free(array);
        return 0;
}

int main(void)
{
        char *set="ACGT";
        char  out[9] = {0};
        int   set_len = 4;
        int   sub_len = 8;
        get_pailie(set, set_len, sub_len, out, sub_len);
        printf("\n共有组合(含重复数据)%d组\n",count);
        return 0;        
}

DO IT YOURSELF !
2014-04-21 16:25
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用zhou31146001在2014-4-21 16:05:35的发言:


k无限制,且k与n无关系。n取20以内任意值。



4的20次方 太大了  1万多亿呢

DO IT YOURSELF !
2014-04-21 16:33
zhou31146001
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:303
专家分:131
注 册:2012-11-28
收藏
得分:0 
以下是引用wp231957在2014-4-21 16:25:47的发言:

在网上找到了一个符合你这个需求的全排列代码


#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int count=0;

/*
 * 加1后进位操作
 * 用字符串模拟数字的进位操作
 */
void add_one(int *array, int array_len, int radio, int *flow)
{
        int i;
        for ( i=array_len-1; i>=0; i-- )
        {
                array += 1;
                //没有进位就退出
                if (array < radio) return; else array = 0;                        
        }
        // 最高位溢出 - 标志进位操作已经结束
        (*flow) = 1;
}

/*
 * 获取全排列
 */
int get_pailie(char *set, int set_len, int sub_len, char *out, int out_len)
{
        int  end_flag = 0;
        int *array    = NULL;
        int  i = 0;
        if ( NULL==set || NULL==out || out_len<sub_len ) return -1;
        if ( (array=(int *)malloc(sub_len * sizeof(int))) == NULL ) return -2;
        // 初始化整数集合为0
        for( i=0; i<sub_len; i++ )  array = 0;
        while( 1 != end_flag )
        {
                for(i=0; i<sub_len; i++)out = set[array];// 输出结果的每一位与它对应的数的每一位相同
                printf("%9s", out);
                if(count%8==0) printf("\n");
                count++;
                // 下标+1
                add_one(array, sub_len, set_len, &end_flag);
        }
        free(array);
        return 0;
}

int main(void)
{
        char *set="ACGT";
        char  out[9] = {0};
        int   set_len = 4;
        int   sub_len = 8;
        get_pailie(set, set_len, sub_len, out, sub_len);
        printf("\n共有组合(含重复数据)%d组\n",count);
        return 0;        
}


您好,首先谢谢您。
但这个程序只能建立4的n次幂个8模体。
统计不了次数,也无法间隔计数。
2014-04-21 16:59
快速回复:还是老问题,请各位帮忙!
数据加载中...
 
   



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

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