C语言巨难的一个编程实现数据筛选,实在想不通怎么解决,请求帮助。或者有没有别的数据结构可解决此问题

2025-03-24 02:46:37
推荐回答(3个)
回答1:

这个问题应该可以分成两个部分。一,统计这组数字各个数字出现的次数,这个用stl来写会很简洁,《c++ primer plus》有个范例或直接网上找类似的例子。自己写,可以先给它们排个序,再挨个统计就好。二,求排列数,这考虑用穷举和递归,比如从某个数组取3个数,取第一个元素,不取第一个元素,分出两条路,在此基础上,取第二个元素,不取第二个元素,现在分出了四条路,依此类推往后,所有元素都考虑完。在递归的过程中,如果已取了三个数则输出一个结果,这条路就完结不再递归了,或元素个数不足也是完结不再递归。先看懂“背包问题”,这个问题也就解决了,并没有什么不可克制的困难

回答2:

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 if (c==0) return 1;
int num=0;
for(int i=0;i int n=Comb(a+i+1,m-i-1,c-1,out+num);
for(int j=0;j num+=n;
}
return num;
}

直接在手机上写的,没经过调试,你当个算法看吧。其它部分你那个题我没理解,就不写了。

回答3:

c能解决 先把文件内容读内存中的数组再操作 这里有个难题是怎样准确的读入 读入内存后怎么都能解决