| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1997 人关注过本帖
标题:排列组合
只看楼主 加入收藏
纳兰伽香
Rank: 10Rank: 10Rank: 10
来 自:北京
等 级:贵宾
威 望:10
帖 子:426
专家分:1650
注 册:2015-4-5
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:50 
排列组合
程序代码:
组合问题
给定一个含有n个元素的整型数组a,从中任取m个元素,求所有组合。比如下面的例子
a = 1, 2, 3, 4, 5
m = 3
输出
1 2 3, 1 2 4, 1 2 5, 1 3 4, 1 3 5, 1 4 5
2 3 4, 2 3 5, 2 4 5
3 4 5
bool IsValid(int lastIndex, int value)  
{  
    int buffer[100]; 
    int i;
    for (i = 0; i < lastIndex; i++)  
    {  
        if (buffer[i] >= value)  
            return false;  
    }  
    return true;  
}  
  
void Select(int t, int n, int m)  
{ 
    bool IsValid(int lastIndex, int value);
    int buffer[100];
    int i;
    if (t == m) 
    {
        printArray(buffer, m);  
    }
    else  
    {  
        for (i = 1; i <= n; i++)  
        {  
            buffer[t] = i;  
            if (IsValid(t, i))
            {
                Select(t + 1, n, m); 
            }
        }  
    }  
}  
为什么不行,求帮帮忙

搜索更多相关主题的帖子: 元素 元素 color color 
2015-04-06 10:06
纳兰伽香
Rank: 10Rank: 10Rank: 10
来 自:北京
等 级:贵宾
威 望:10
帖 子:426
专家分:1650
注 册:2015-4-5
收藏
得分:0 
自顶

[ 本帖最后由 纳兰伽香 于 2015-4-6 10:15 编辑 ]

风回小院庭芜绿,柳眼春相续
2015-04-06 10:07
纳兰伽香
Rank: 10Rank: 10Rank: 10
来 自:北京
等 级:贵宾
威 望:10
帖 子:426
专家分:1650
注 册:2015-4-5
收藏
得分:0 
程序代码:
还有个问题  这是一个字符串的链接
#include<stdio.h>
int main()
{
    char str1[40];
    char str2[40];
    int count1 = 0;
    int count2 = 0;
    gets(str1);
    gets(str2);
    while(str1[count1])
        count1 ++;
    while(str2[count2])
        count2 ++;
    if(sizeof(str1) < count1 + count2 + 1)
        printf("Error\n");
    else
    {
        count2 = 0;
        while(str2[count2])
            str1[count1 ++] = str2[count2 ++];
        str1[count1] = '\0';
        printf("str1 = %s\n",str1);
    }
    return 0;
}


为什么最后要str1[count1] = '\0'; 不懂 求帮帮忙

风回小院庭芜绿,柳眼春相续
2015-04-06 10:31
z_j_j_1
Rank: 4
等 级:业余侠客
威 望:1
帖 子:62
专家分:213
注 册:2015-4-4
收藏
得分:0 
回复 3楼 纳兰伽香
因为字符串最后一个字符默认为‘\0’。当执行 printf("str1 = %s\n",str1); 语句的时候,只有执行到‘\0’字符后,打印输出才会自动结束。


[ 本帖最后由 z_j_j_1 于 2015-4-6 10:46 编辑 ]
2015-04-06 10:43
纳兰伽香
Rank: 10Rank: 10Rank: 10
来 自:北京
等 级:贵宾
威 望:10
帖 子:426
专家分:1650
注 册:2015-4-5
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <string.h>
int main()
{
    char str1[10] = "123456";
    char str2[5] = "qwer";
    strcat(str1,str2);
    puts(str1);
    return 0;
}
很明显str1空间不足  但是为什么不报错 而且最后运行的结果是  123456qwer   不懂

风回小院庭芜绿,柳眼春相续
2015-04-06 10:43
z_j_j_1
Rank: 4
等 级:业余侠客
威 望:1
帖 子:62
专家分:213
注 册:2015-4-4
收藏
得分:0 
回复 5楼 纳兰伽香
你这样操作 碰巧数组后面的4个字节没有被占用,一旦占用了就会导致程序出错。
2015-04-06 10:56
纳兰伽香
Rank: 10Rank: 10Rank: 10
来 自:北京
等 级:贵宾
威 望:10
帖 子:426
专家分:1650
注 册:2015-4-5
收藏
得分:0 
回复 6楼 z_j_j_1
不是你说的那样  即使占用了  也不报错

风回小院庭芜绿,柳眼春相续
2015-04-06 11:03
z_j_j_1
Rank: 4
等 级:业余侠客
威 望:1
帖 子:62
专家分:213
注 册:2015-4-4
收藏
得分:0 
回复 7楼 纳兰伽香
不是编译报错,是一量程序比较大了 程序运行会出错。因为程序操作已经溢出了分配的内存。溢出的部分就完全不由程序员控制了。这种情况是完全不允许的。
2015-04-06 11:14
纳兰伽香
Rank: 10Rank: 10Rank: 10
来 自:北京
等 级:贵宾
威 望:10
帖 子:426
专家分:1650
注 册:2015-4-5
收藏
得分:0 
回复 8楼 z_j_j_1
恩 我做了处理  
程序代码:
    if(sizeof(str1) > strlen(str1)+strlen(str2) + 1)
    {
        strcat(str1,str2);
    }
    else
    {
        printf("-_-!!!\n");
    }


风回小院庭芜绿,柳眼春相续
2015-04-06 11:22
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
回复 9楼 纳兰伽香
if(sizeof(str1) > strlen(str1)+strlen(str2) + 1)
>= 即可

Only the Code Tells the Truth             K.I.S.S
2015-04-06 12:08
快速回复:排列组合
数据加载中...
 
   



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

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