当前位置:编程学习 > C/C++ >>

c/c++语言实现组合

如元素有“a,b,c,d,e,A,B,C,D,E,1,2,3,4,5”,从中选取4个元素进行组合,必须把所有组合列出,如何实现呢?
补充:太难了,还是这样吧,各位不好意思!谢谢帮忙,帮到底吧。
我的题是这样的,从这堆元素里边抽取n个,进行排列,然后给出所有可能的排列。
比如元素为“asdfgASDF1234”,可以组成asdf,ASDF,1234,12AS,1aAs等等,全部列出,我开始把全排列弄好了,等着组合,看看又不行,还是各位高手一次性弄好得了,我追加30分,谢谢啊



各位先休息吧,我结合自己的题目再弄弄,明天给你们答复,谢谢各位热心人士啊!
追问:这个有排列就好了,怪我,之前没想清楚,麻烦把排列添上好么,谢谢目前为止这个最好哦,我先试试这个哦,那就这样,把元素改成“a,A,1,2”这几个吧,长度改为3,我只想要算法,呵呵,谢谢
并且只是组合哦,比如aA1,Aa1是一样的这个方法固定了排列的元素个数为4,改不了,不太符合我的要求哦,也谢谢了给个代码吧,我实在想不到呀,谢谢这个也是固定了位数固定了位数,同上
答案:#include <iostream>
using namespace std;

char charset[256];
char output[256];

// charset是字符表, len是字符表长度, num是当前选择了的个数, des是目标个数, loc是当前考察的对象
void print(char charset[], int len, int num, int des, int loc)
{
	if(num==des)
	{
		output[num] = 0;
		cout << output << endl;
		return;
	}
	if(des-num>len-loc) return;
	output[num] = charset[loc];
	print(charset,len,num+1,des,loc+1);
	print(charset,len,num,des,loc+1);
}

int main()
{
	while(cin >> charset)
	{
		int len = strlen(charset);
		print(charset,len,0,4,0); // 调用方式: print(字符表, 字符表长度, 0, 需要选取的个数, 0);
	}
}
其他:楼主、、有1365种呢、、显示器有得显示 利用四重循环实现,子层循环从父层循环的下一元素开始即可。 Assica与数可转化,查assima表可得 #include "stdio.h"
int main()
{
 char str[]="abcdeABCDE12345";
 char *pa,*pb,*pc,*pd;
 for(pa=moon;pa<=moon+14;++pa)
  {
   for(pb=moon;pb<=moon+14;++pb)
    {
     for(pc=moon;pc<=moon+14;++pc)
      {
       for(pd=moon;pd<=moon+14;++pd)
         printf("%c%c%c%c%c\t",*pa,*pb,*pc,*pd) ;
      }
    }
  }
  getch();
  return 0;
} #include<stdio.h>

char person[] = {"abcde"};//ABCDE12345
int ans[5];
int max = 5;
int count;

void figure(int index, int crime)
{
    if (index > count - 1)
    {
		//µ½ÁËÕâÀïÒѾ­¿ÉÒÔÁгöËùÓеÄ×éºÏÁË£¬ 
		//ÔÙÐèÒªÒ»¸öÊÐÏØÅÅÁеĺ¯Êý¾ÍʵÏÖÁË
		for(index = 0;index<=count-1;index++)
			printf("%c ",ans[index]);
		printf("\n");
        return;
    }

    for (; crime <= max - count + index; crime++)
    {
        ans[index] = person[crime];

        //printf("a[%d] = %d\n", index, ans[index]);
        figure(index + 1, crime + 1);
    }
}

int find(int value)
{
    int i;
    for (i = 0; i < count; i++)
        if (ans[i] == value)
        {
            return 1;
        }
    return 0;
}


void main()
{
    count = 4;
    figure(0, 0);
}

上一个:求2011全国计算机二级C语言考试的 《南开100题》公共基础知识和机试试题。
下一个:C高手进!!!

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,