这个问题应该可以分成两个部分。一,统计这组数字各个数字出现的次数,这个用stl来写会很简洁,《c++ primer plus》有个范例或直接网上找类似的例子。自己写,可以先给它们排个序,再挨个统计就好。二,求排列数,这考虑用穷举和递归,比如从某个数组取3个数,取第一个元素,不取第一个元素,分出两条路,在此基础上,取第二个元素,不取第二个元素,现在分出了四条路,依此类推往后,所有元素都考虑完。在递归的过程中,如果已取了三个数则输出一个结果,这条路就完结不再递归了,或元素个数不足也是完结不再递归。先看懂“背包问题”,这个问题也就解决了,并没有什么不可克制的困难
1,从一个数组里取c个数的组合问题,这个可以用递归实现。
m长度的数据,用a[M]定义,M是m的最大值
组合结果用out[MM][C]定义。MM是组合最多的上限,C是c的最大值
int Comb(int *a, int m, int c, int *out[C]) //返回值是组合的个数。
{
if (m
int num=0;
for(int i=0;i
for(int j=0;j
}
return num;
}
直接在手机上写的,没经过调试,你当个算法看吧。其它部分你那个题我没理解,就不写了。
c能解决 先把文件内容读内存中的数组再操作 这里有个难题是怎样准确的读入 读入内存后怎么都能解决