获取数组最大值或最小值的下标集合。。。网上的有的有问题
比喻说个数组
int[] intArray = { 1, 3, 7, 12, 12, 6, 1, 8 };
那么这个最大值的下标就是 3 ,4
最小值的下标就是 0,6
这个程序怎么写啊?
[解决办法]
int[] p = new int[100]; //存放所有的最大值
int position = 0;//存放最大值的位置
int j = 1;//存放相同最大值的位置
for (int i = 1; i < 100; i++)
{
if (intArray [i] > intArray [position])
{
position = i;
j = 1;
}
else if (intArray [i] == intArray [position])
{
p[j++] = i;
}
}
p[0] = position;
if (j < 100)
{
p[j] = -1;
}
Console.WriteLine("最大值为" + intArray [position]);
Console.WriteLine("最大值的位置为:");
for (int i = 0; i < 100; i++)
{
if (p[i] == -1)
break;
Console.WriteLine(p[i]+1);
}
Console.ReadLine();
[解决办法]
参考:
- C# code
static void Main(string[] args) { int[] intArray = { 1, 3, 7, 12, 12, 6, 1, 8 }; MyClass max = new MyClass(intArray[0]); MyClass min = new MyClass(intArray[0]); for (int i = 0; i < intArray.Length; i++) { int j = intArray[i]; if (j > max.Value) { max.Value = j; max.Indexes.Clear(); max.Indexes.Add(i); } else if (j < min.Value) { min.Value = j; min.Indexes.Clear(); min.Indexes.Add(i); } else if (j == max.Value) max.Indexes.Add(i); else if (j == min.Value) min.Indexes.Add(i); } Console.WriteLine("最大值为:{0},索引为:", max.Value); foreach (int i in max.Indexes) Console.Write("{0} ", i); Console.WriteLine(); Console.WriteLine("最小值为:{0},索引为:", min.Value); foreach (int i in min.Indexes) Console.Write("{0} ", i); } class MyClass { private int value; public int Value { get { return value; } set { this.value = value; } } private List<int> indexes; public List<int> Indexes { get { return indexes; } set { indexes = value; } } public MyClass(int value) { this.value = value; indexes = new List<int>(); indexes.Add(0); } }/*输出:最大值为:12,索引为:3 4最小值为:1,索引为:0 6 */