13,190
社区成员
发帖
与我相关
我的任务
分享
double[] a = new double[] { 0.12, 0.13, 0.25, 0.35, 0.36, 0.75, 0.76 };
double[] t = new double[2] { 0, 0 };
int i = 0;
for (; i < a.Length - 1; i++)
{
if (a[i+1] - a[i] < 0.05)
{
if (t[1]!=0)
{
a[(int)t[0]] = a[i + 1];
a[i + 1] = t[1];
t[1] = 0;
}
else
{
t[0] = i + 1;
t[1] = a[i + 1];
}
}
}
if (a[i]-a[i-1]<0.05)
{
double tmp = a[i];
a[i] = a[0];
a[0] = tmp;
}
/*
* Created by SharpDevelop.
* User: csjxp
* Date: 2010-6-29
* Time: 18:15
*
*
* 思路是A(1),A(2),A(3),.....A(n);
*
* 假设存在A(n),A(m)其中 m=n+1,不满足A(m)>=A(n)+0.05;
*
*这个时候有两种办法
*
* 1是A(m)=A(n)+0.05;
*
* 2是A(n)=A(m)-0.05;
*
* A(m)后面的数字是基于A(m)来改变的,如果增大A(m),后面的元素会改变很多
*
* 如果采用方法2 A(1)..A(n-1)是排列好了的,A(m)...A(last) 还是基于A(m)的大小
* 所以采用A(n)=A(m)-0.05;
*
* 但是采用方法2必须有先决条件
*
* 那就是A(n)=A(m)-0.05之后,必须还要满足 A(n)>=A(n-1)+0.05;
*
* 如果不满足就没办法 只有A(n)=A(n-1)+0.05;
*
* 因为A(n)进行了改变,所以再一次比较 A(n)与A(m)的值;
*
* 如果A(m)<A(n)+0.05;
*
* 那只能采用1,A(m)=A(n)+0.05;
*
* 然后递归
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
namespace test
{
/// <summary>
/// Description of Class1.
/// </summary>
public class Class1
{
static void Main()
{
double[] aa=new double[]{0.12,0.13,0.17,0.23,0.28,0.35,0.36};
Regulation(aa,1,aa.Length);
for(int i=0;i<aa.Length;i++)
{
Console.WriteLine(aa[i]);
}
// double[] bb=new double[]{0.13,0.15,0.26,0.,0.28,0.35,0.4};
Console.ReadKey();
}
static void Regulation(double[] aa,int first,int last)
{
if(first>=last)
return;
//第一个元素
double entry=aa[first-1];
//后面那个元素和前面那个元素比较
if(aa[first]<entry+0.05)
{
entry=aa[first]-0.05;
}
if(first==1 || entry>=aa[first-2]+0.05)
{
aa[first-1]=entry;
}
else
{
aa[first-1]=aa[first-2]+0.05;
}
if(aa[first]<aa[first-1]+0.05)
aa[first]=aa[first-1]+0.05;
Regulation(aa,first+1,last);
}
}
}
double[] a = new double[] { 0.12, 0.13, 0.25, 0.35, 0.36, 0.75, 0.76,0.77};
int length = a.Length/2;
for(int i=0;i<length;i++)
{
if (length+i+1<a.Length&&a[length+i+1]-a[length+i]<0.05)
{
a[length + i+1] = a[length+i] + (double)0.05;
}
if (length-i-1>=0&& a[length-i]-a[length-i-1]<0.05)
{
a[length - i - 1] = a[length - i] - 0.05;
}
}