平均分割一个数组
2012-01-03 16:22
519 查看
最近想平均分割一个数组,比如把一个10数的数组分成6个数组的,最好的分法是2,2,2,2,1,1,这个2很好求出,直接10/6上取整就可以了,但是如果按2去分割的话,最后会变成2,2,2,2,2,0这样不均匀的分法,很是蛋疼。
今天休息,想了一下这个问题,发现可以用递归来解决。比如先分出2来,递归将8分成5个数组,有能分出2来,递归将6分成4个数组,在分出2来,变成了递归将4分成3个数组,又可以分出2来,那就变成了将2分成2个数组,下一步就很明显了。
不多说了,直接上码,希望对遇到同问题的人有所帮助,这也算我的功德了。
View Code
#include <iostream>
#include <vector>
using namespace std;
template <typename T>
vector<vector<T> > average_divide(T ar[], int size, int cnt)
{
vector<vector<T> > res;
if (cnt == 0)
{
return res;
}
vector<T> first;
int first_size = (size - 1) / cnt + 1;
for (int i = 0; i < first_size; i++)
{
first.push_back(ar[i]);
}
res.push_back(first);
vector<vector<T> > other = average_divide(ar + first_size, size - first_size, cnt - 1);
for (vector<vector<T> >::iterator it = other.begin(); it != other.end(); it++)
{
res.push_back(*it);
}
return res;
}
int main()
{
int a[] = {1, 4, 5, 7, 6, 9, 8, 0, 3, 2};
vector<vector<int> > res = average_divide(a, 10, 6);
for (vector<vector<int> >::iterator it = res.begin(); it != res.end(); it++)
{
for (vector<int>::iterator vit = it->begin(); vit != it->end(); vit++)
{
cout << *vit << ' ';
}
cout << endl;
}
return 0;
}
下载地址:AverageDivide.cpp
今天休息,想了一下这个问题,发现可以用递归来解决。比如先分出2来,递归将8分成5个数组,有能分出2来,递归将6分成4个数组,在分出2来,变成了递归将4分成3个数组,又可以分出2来,那就变成了将2分成2个数组,下一步就很明显了。
不多说了,直接上码,希望对遇到同问题的人有所帮助,这也算我的功德了。
View Code
#include <iostream>
#include <vector>
using namespace std;
template <typename T>
vector<vector<T> > average_divide(T ar[], int size, int cnt)
{
vector<vector<T> > res;
if (cnt == 0)
{
return res;
}
vector<T> first;
int first_size = (size - 1) / cnt + 1;
for (int i = 0; i < first_size; i++)
{
first.push_back(ar[i]);
}
res.push_back(first);
vector<vector<T> > other = average_divide(ar + first_size, size - first_size, cnt - 1);
for (vector<vector<T> >::iterator it = other.begin(); it != other.end(); it++)
{
res.push_back(*it);
}
return res;
}
int main()
{
int a[] = {1, 4, 5, 7, 6, 9, 8, 0, 3, 2};
vector<vector<int> > res = average_divide(a, 10, 6);
for (vector<vector<int> >::iterator it = res.begin(); it != res.end(); it++)
{
for (vector<int>::iterator vit = it->begin(); vit != it->end(); vit++)
{
cout << *vit << ' ';
}
cout << endl;
}
return 0;
}
下载地址:AverageDivide.cpp
相关文章推荐
- 'VB编程 编写一个竞赛评分的函数过程。评委打分为参数(数组参数),选手得分为函数值。记分规则为:去掉一个最高分,去掉一个最低分,然后求平均。调用该函数,由键盘输入5个评委的打分(存放在数组中),输出
- Javascript 一个数组中求最大数,将数组元素反转,用分割线将数组元素分割(注意arr.length字母的大小写,这里全是小写)
- C语言,以空格为分割,以回车为结束标记,输入一串数字到一个int数组中
- 根据分隔符将一个长字符串分割保存到动态数组中(第二种方法)
- c语言 谭浩强 一维数组内放10个学生成绩 全局变量写一个函数 最高分、最低分、平均分
- 字符串---分割成数组(str_split ),算出一个字符串中出现最多的字符, 学校中最多的姓名
- php-Arrays 函数-chunk-将一个数组分割成多个数组
- 根据分隔符将一个长字符串分割保存到动态数组中(第二种方法)
- oracle怎么切割一个指定的字符串按指定的标志符分割成字符数组
- 将一个数组分割成尽量均衡的2个数组(java)
- 给定一个整数sum,从有N个无序元素的数组中寻找元素a、b、c、d,使得 a+b+c+d =sum,最快的平均时间复杂度是____。
- C/C++如何把一个特定分隔符分割的字符串划分为一个字符串数组,strtok(char *,char*)分割函数
- c语言 谭浩强 一维数组内放10个学生成绩 全局变量写一个函数 最高分、最低分、平均分
- 平均分割数组
- C++ string字符串分割成一个数组
- 将一个字符串数组输出为|分割的形式(C#)
- 1将一个字符串数组输出为|分割的形式
- 一个字符串分割成字符串数组
- JAVA中 我要将字符串以空格为标记分割成多个字符串,并将分割后的字符串设为一个字符串数组
- 编程之美 2.18数组分割 将一个长度为2N的数组分割成2个长度为N的数组,且两数组的和的差的绝对值最小,即和最接近 动态规划?????????????????????????????????????