float[] H = new float[100];
假设
H[0]=1329.53
H[2]=1330.79
H[3]=1330.48
H[4]=1328.34
H[5]=1335.51
H[6]=1330.54
H[7]=1333.97
H[8]=1334.02
H[0]=1329.93
H[10]=1329.85
H[N]=xxx
假设
H[0]=1329.53
H[2]=1330.79
H[3]=1330.48
H[4]=1328.34
H[5]=1335.51
H[6]=1330.54
H[7]=1333.97
H[8]=1334.02
H[0]=1329.93
H[10]=1329.85
H[N]=xxx
for (int j = 0; j <100; j++) { if (H[j] > H[j + 1] && H[j] > H[j + 2] && H[j] > H[j + 3] && H[j] > H[j + 4]&&H[j] > H[j - 1] && H[j] > H[j - 2] && H[j] > H[j - 3] && H[j] > H[j - 4]) { //H[j] } }
需求是设定一个常数,根据设定常数,找出数组中大于左右两边常数个数的最高值
例:假如常数设为6,找出任一个数左边6个,和右边6个均小于该数的值。求对以上代码改造(以上是写死的,只能比较前后四个,本人需要能比较前后任意设定数量的值),不知道本人说清楚没有,小菜座等大神帮助解决。
解决方案
10
float[] a = { 1329.53f, 1330.79f, 1330.48f, 1328.34f, 1335.51f, 1330.54f, 1333.97f, 1334.02f, 1329.93f, 1329.85f }; int n = 1; //你给的数据只能满足前后 1 bool flag = true; for (int i = 0; i < a.Length - n; i++) { flag = true; if (a[i] < a[n + i]) { for (int j = 1; j < n; j++) { if (a[i + j] > a[n + i] || a[n + i + j] < a[n + i]) { flag = false; break; } } if (flag) Console.WriteLine("[{0}] {1}", n + i, a[n + i]); } }
30
public void finds(int i)
{
float[] H = new float[100];
//数组100个元素,i<(100-1)/2,i<=49,不然相邻i个元素不存在
{
float[] H = new float[100];
//数组100个元素,i<(100-1)/2,i<=49,不然相邻i个元素不存在
for (int j = i, k = 1; j <100-i; j++)
{
for( k =1;k<i+1;k++)
{
if(H[j] > H[j-k] && H[j] > H[j+k]) //元素j为中心,成对比较。假如j最大,for会正常执行完(K=i+1),否则中途break
{
}
else //有比H[j]大的元素,break
{
break;
}
}
if (k ==( i + 1))
{
// return j; //第j个为最大
}
}
}
元素没填充,本人填了运行,没有判断j不存在的情况