日期:2014-05-19  浏览次数:20880 次

(求救50分)有关一个算法问题?
现在有一个数组
例如:int   []   aa=new   int{9,12,45,62,8,,200,45,12,46,12,13,3,9,34,100,78,91}
1,首先找出这个数组中最大的数字.
2,然后,以这个最大数字的界,分成两组,然后,再求出这两组的的最大值,再以各组的最大值,分成两组,再求出最大值,如此类推.直至列举任一组只剩下两个数为止!
3.把这些最大数以数组的形式存储下来!

我想了很长时间都不知道,怎样算了,请问   C#   如何实现???

------解决方案--------------------
看见算法就头疼,帮你顶!~
------解决方案--------------------
int [] aa=new int{9,12,45,62,8,,200,45,12,46,12,13,3,9,34,100,78,91}

找到200,然后分成,
{9,12,45,62,8} {45,12,46,12,13,3,9,34,100,78,91}

然后把200送进一个List~~~

然后再{9,12,45} {8}送62

------解决方案--------------------
private int getmaxindex(int[] a)
{
//求最大值的下标 i
console.writeln(i.tostring());
}

private void getMaxnum(int[] a)
{
int[] a1;
int[]a2;
int i=getmaxindex(a);

if(a.lenth> 2)
{
a1=Array.copy(a,0,a1,0,i-1);
a2=Array.copy(a,i+1,a2,0,a.length-i-1);
getMaxnum(a1);
getMaxnum(a2);
}

}
程序没调试,外网没.net,凑合改吧
------解决方案--------------------

[STAThread]
static void Main(string[] args)
{
int [] a=new int[]{9,12,45,62,8,200,45,12,46,12,13,3,9,34,100,78,91};
Class1.findmax(a);


}
static void findmax(int [] v)
{
int max=v[0];
int pos=0;

//找出最大者
for(int i=1;i <v.Length;i++)
{
if(v[i]> max)
{
max=v[i];
pos=i;
}
}
Console.WriteLine(max.ToString());
int []a1=new int[pos+1];
int []a2=new int[v.Length-pos-1];
if(pos> 0 && pos <v.Length-1)
{
Array.Copy(v,0,a1,0,pos-1);
Array.Copy(v,pos+1,a2,0,v.Length-pos-1);
}
if(pos==0)
{
Array.Copy(v,1,a2,0,v.Length-1);
}
if(pos==v.Length-1)
{
Array.Copy(v,0,a1,0,v.Length-1);
}
if(a1.Length> 2)
{
Class1.findmax(a1);

}
if(a2.Length> 2)
{
Class1.findmax(a2);

}

}
------解决方案--------------------
class Program
{

static void Main(string[] args)
{
int[] nums = new int[] {9,12,45,62,8,200,45,12,46,12,13,3,9,34,100,78,91};

//用来放结果的list
List <int> result = new List <int> ();

SplitArrayByMax(result, nums);

Console.Read();
}
static void SplitArrayByMax(List <int> result, int[] nums){
if (nums.Length <= 2) {
return;
}
int maxIndex = 0;//数组的最大下标
for (int i = 1; i < nums.Length; i++) {
if (nums[i] > nums[maxIndex]) maxIndex = i;
}
result.Add(nums[maxIndex]);
Console.WriteLine(nums[maxIndex]);
List <int> left=new List <int> ();
List <int> right=new List <int> ();
for(int i=0;i <nums.Length;i++){
if (i < maxIndex) {
left.Add(nums[i]);
}else if (i > maxIndex) {
right.Add(nums[i]);