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高手进!!!