需要帮助查找用户给定的3个值的中间值
本文关键字:中间 3个 帮助 查找 用户 | 更新日期: 2023-09-27 18:25:14
我正在复习老师给我的第一次四分之一决赛的复习,有一个问题我不记得老师复习过了。问题是"从用户那里获得3个值,计算并显示中间值",即10、20、30…20是中间值。到目前为止,我已经尝试了这个代码的迭代:
Console.WriteLine("Enter a value: ");
int value10 = int.Parse(Console.ReadLine());
Console.WriteLine("Enter another value: ");
int value11 = int.Parse(Console.ReadLine());
Console.WriteLine("Enter one last value: ");
int value12 = int.Parse(Console.ReadLine());
if (value10 > value11 && value11 > value12)
Console.WriteLine("{0} is the middle value.", value11);
else if (value11 > value12 && value12 > value10)
Console.WriteLine("{0} is the middle value.", value12);
else
Console.WriteLine("{0} is the middle value.", value10);
我没有写过这部作品的版本。。。。WTF我失踪了吗?我一直在尝试不同的值组合,以及小于/大于符号的方向。我还尝试了if
、if else
和else
的不同变体。提前感谢您的帮助。
一个选项(也适用于许多元素)是对中间元素进行排序。
var items = new[]{value10,value11, value12};
Array.Sort(items);
Console.Write(items[items.Length/2]);
如果输入总是三项,而您只需要第二项,为什么不将输入放入列表中,对其进行排序,然后选择第二个值?
List<int> inputList = new List<int>();
inputList.Add(int.Parse(Console.ReadLine()));
Console.WriteLine("Enter another value: ");
inputList.Add(int.Parse(Console.ReadLine()));
Console.WriteLine("Enter one last value: ");
inputList.Addint.Parse(Console.ReadLine()));
inputList.Sort();
Console.WriteLine("{0} is the middle value.", inputList[1])
编写程序的第一部分循环可能会更干净一些,直到您用想要的值填充了List<int>
:
const int itemCount = 3;
List<int> inputValues = new List<int>(itemCount);
while(inputValues.Count < itemCount)
{
Console.WriteLine("Enter a value: ");
int parsed;
if(int.TryParse(Console.ReadLine(), out parsed))
inputValues.Add(parsed);
else
Console.WriteLine("Please try again!");
}
输入自然属于一个可以排序的集合,因此在输入的过程中以这种方式存储数据是有利的。(如果您喜欢处理无效条目并继续输入而不引发异常,那么使用int.TryParse()
代替int.Parse()
也是一个小步骤。上面的代码将继续询问值,直到它有三个值可以成功解析为止。)
List
可以用它的.Sort()
方法"就地"排序(不复制列表),列表的索引器可以用来查找中间项。
int middleIndex = (itemCount - 1) / 2; // hopefully, your list has an odd number of elements!
inputValues.Sort();
int middleValue = inputValues[middleIndex];
Console.WriteLine(middleValue);
尽管它不是解决您的问题的最有效的解决方案,特别是对于较大数量的元素,但我仍然认为LINQ为您提供了一种强大的语法来订购IEnumerable
元素:
int middleValue = inputValues.OrderBy(x => x).ElementAt(middleIndex);
在if语句中添加"OR"条件:
if (value10 > value11 && value11 > value12 || value12 > value11 && value11 > value10)
Console.WriteLine("{0} is the middle value.", value11);
else if (value11 > value12 && value12 > value10 || value10 > value12 && value12 > value11)
Console.WriteLine("{0} is the middle value.", value12);