| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 326 人关注过本帖
标题:这个组合问题如何解决?
只看楼主 加入收藏
NCBC211
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2011-4-6
结帖率:50%
收藏
已结贴  问题点数:10 回复次数:5 
这个组合问题如何解决?
程序代码:
#include<stdio.h>
#include<string.h>

void main()
    {
    int i,j,k,l,m,z;
       char *ptr;
    char str1[5],str2[5];
    for(j=1;j<=6;j++)       
        for(k=j+1;k<=7;k++)
            for(l=k+1;l<=8;l++)
                for(m=l+1;m<=9;m++)
                {
                              
                str1[0]=char(0);str1[1]=char(j);str1[2]=char(k);str1[3]=char(l);str1[4]=char(m);
             printf("%s" ,str1);

                for(int n=0;n<=9;n++)
                    {
                        ptr = strrchr(str1, char(n));
                    if(ptr==NULL)
                        str2[z++]=char(n);
                   
                       
                    }
                              
            }
         //printf("%s" ,str3);
        

    }
求出由0,1,2,3,4,5,6,7,8,9十个字符组成的以0开头的任五个数的组合,成对出现str1 和str2。
2011-04-21 08:59
xjzxylj
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:86
专家分:113
注 册:2011-4-18
收藏
得分:0 
字符串纠结在一起了,看了N久,头痛,不过四个for循环就有问题吧,按你的程序,后四位不是随意组合的,而是顺序的数了。后面                for(int n=0;n<=9;n++)
                    {
                        ptr = strrchr(str1, char(n));//是用来查找输出字符的吧,可是你的是数据啊,这里会有矛盾吧;
                    if(ptr==NULL)
                        str2[z++]=char(n);
都是个人见解,说的不对,见谅;

淫一手湿,简单;难的是,淫一被子湿。(富有诗意,此处抄袭)
2011-04-21 09:55
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:10 
程序代码:
#include <stdio.h>

int main() {
    char str1[6] = {0}, str2[6] = {0}, used[10] = {0}, i, j;
    str1[0] = '0';
    used[0] = 1;
    for (str1[1] = '1'; str1[1] <= '9'; str1[1]++) {
        used[str1[1] - '0'] = 1;
        for(str1[2] = str1[1] + 1; str1[2] <= '9'; str1[2]++) {
            used[str1[2] - '0'] = 1;
            for(str1[3] = str1[2] + 1; str1[3] <= '9'; str1[3]++) {
                used[str1[3] - '0'] = 1;
                for(str1[4] = str1[3] + 1; str1[4] <= '9'; str1[4]++) {
                    used[str1[4] - '0'] = 1;
                    for (i = 1, j = 0; j < 5; i++) {
                        if (!used[i]) {
                            str2[j++] = '0' + i;
                        }
                     }
                    printf("%s %s\n", str1, str2);
                    used[str1[4] - '0'] = 0;
                }
                used[str1[3] - '0'] = 0;
            }
            used[str1[2] - '0'] = 0;
        }
        used[str1[1] - '0'] = 0;
    }
    return 0;
}


[ 本帖最后由 voidx 于 2011-4-21 12:05 编辑 ]
2011-04-21 10:00
NCBC211
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2011-4-6
收藏
得分:0 
我是想通过循环实现十个符的任五个的组合。这样的组合是由顺序的数构成的。for(int n=0;n<=9;n++)这个循环是找出四个for 产生组合(以0开头)的另一半。即十个数共有262个不重合数的组合,我是想将其分为252/2=126对组合(每对内无重复字符)。并将它们都转为字符组合。编译时str1 str2 生成的就是不对,不知何故。用strchr函数也是这样。请指教!谢谢!
2011-04-21 10:08
NCBC211
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2011-4-6
收藏
得分:0 
主要目的是成对产生 即第一对是:01234,56789。。。。。。最后一对是:06789,12345。
2011-04-21 10:14
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
上面的代码改过了,现在应该符合要求了
2011-04-21 12:06
快速回复:这个组合问题如何解决?
数据加载中...
 
   



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

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