第九十五课 编程题—第二大数和第一个出现一次的字符
我能想到的方法是冒泡排列后再输出倒数第二个数字。
做了几次没做出来,让我再继续想想。(2022.3.29)
//输入10个不相等的正整数,输出这10个正整数中的第二大的数。
//样例输入:3 5 7 2 9 5 3 10 3 8
//样例输出:9
string str = Console.ReadLine();
string[] strArray = str.Split(" ");
int[] intArray = new int[strArray.Length];
for(int i = 0; i < strArray.Length; i++)
{
int number = Convert.ToInt32(strArray[i]);
intArray[i] = number;
}
int max1 = 0;int max2 = 0;
for(int i = 0; i < intArray.Length; i++)
{
if (intArray[i] > max1)
{
max2 = max1;
max1 = intArray[i];
}
else
{
if (intArray[i] > max2)
{
max2 = intArray[i];
}
}
}
Console.Write("第一大值是:" + max1 + " 第二大值是:" + max2);
啊~~原来这么简单!!是我想复杂了,要不是听老师讲,现在是没憋出来呢!
原理:
用max1与每个数字比较,如果比较的数字比max1大,那么这个数字就给max1,然后max1被替下来的那个值给max2保存(当然,要先用max2保存max1不要的那个值,在把大于max1的数字赋值给max1);如果数字不大于max1的值,这个数字就与max2比较,如果这个数字大于max2,这个数字就与max2交换。
说的通俗些,保持max1最大,max2第二大,然后用数字和max1和max2分别比较,如果比自己大就拿过来。