目录

本题让我们求出最高分和最低分的差,只是让我们找出最大值和最小值,并没有让我们进行排序 ,用打擂台的方式更好,不需要用各种排序方法(冒泡排序,快排),显得杀鸡用宰牛刀了。
可以假设数组首元素是最大值max,通过数组遍历进行比较。遍历过程中,有元素比max要大,max就要更新了,最终会找到数组元素的最大值,即最高分;
也可以假设数组首元素是最小值min,通过数组遍历进行比较。遍历过程中,有元素比min要小,min就要更新了,最终会找到数组元素的最小值,即最低分;
这两个过程互不影响,所以可以写在同一个for循环中进行遍历。最终max里存了最高分,min里存了最低分。
- #include <stdio.h>
-
- int main()
- {
- int n = 0;
- scanf("%d",&n);
- int arr[10000] = { 0 };
- int i = 0;
- for (i = 0; i < n; i++)
- {
- scanf("%d",&arr[i]);
- }
- //找出最高分和最低分
- int max = arr[0];
- int min = arr[0];
- for (i = 1; i < n; i++)
- {
- if (arr[i] > max) //写成arr[i] > arr[0]是错的
- max = arr[i];
- if (arr[i] < min)
- min = arr[i];
- }
- printf("%d\n",max - min);
- return 0;
- }
注意:此方法需要输入的数据有范围(!!!),本题输入的数据范围是0-100,可以使用此方法
假设最大值是数据范围内的最小值 max = 0;
假设最小值是数据范围内的最大值 min = 100;
每输入一个值,就进行一次判断,有元素比max要大,max就要更新了;有元素比min要小,min就要更新了;这也是为什么要将max赋值为0,因为我输入的任何一个值都有可能比max大,max就可以被更新。同理,将min赋值为100,我输入的任何一个值都有可能比min小,min就可以被更新。
- #include <stdio.h>
-
- int main()
- {
- int n = 0;
- scanf("%d",&n);
- int arr[10000] = { 0 };
- int i = 0;
- int max = 0;
- int min = 100;
- for (i = 0; i < n; i++)
- {
- scanf("%d",&arr[i]);
-
- if (arr[i] > max)
- max = arr[i];
- if (arr[i] < min)
- min = arr[i];
- }
- printf("%d\n", max - min);
-
- return 0;
- }
- #include <stdio.h>
-
- int main()
- {
- int n = 0;
- scanf("%d",&n);
- int score = 0;
- int i = 0;
- int max = 0;
- int min = 100;
- for (i = 0; i < n; i++)
- {
- scanf("%d",&score);
-
- if (score> max)
- max = score;
- if (score < min)
- min = score;
- }
- printf("%d\n", max - min);
-
- return 0;
- }
通过冒泡排序将数组中的元素由小到大排序,从而找到最大值和最小值。
- #include <stdio.h>
-
- int main()
- {
- int n = 0;
- scanf("%d", &n);
- int arr[10000] = { 0 };
- int i = 0;
- for (i = 0; i < n; i++)
- {
- scanf("%d", &arr[i]);
- }
- //一趟
- for (i = 0; i < n - 1; i++)
- {
- int j = 0;
- for (j = 0; j <n-1-i; j++)
- {
- //交换
- if (arr[j] > arr[j + 1])
- {
- int tmp = arr[j];
- arr[j] = arr[j + 1];
- arr[j + 1] = tmp;
- }
- }
- }
- printf("%d\n",arr[n-1]-arr[0]);
-
- return 0;
- }


数据有范围:0-100 ,可以一边输入数据一边判断大小
与上一题方法二的思想一样,打擂台。
- #include <stdio.h>
-
- int main()
- {
- int score = 0;
- int i = 0;
- int max = 0;
- for (i = 0; i < 3; i++)
- {
- scanf("%d",&score);
- if (score > max)
- max = score;
- }
- printf("%d\n",max);
-
- return 0;
- }
-

下面3种方法是之前做这题时我使用的,不推荐
- #include <stdio.h>
-
- int main()
- {
- int a = 0;
- int b = 0;
- int c = 0;
- scanf("%d %d %d", &a, &b, &c);
- if (a < b)
- {
- int tmp = a;
- a = b;
- b = tmp;
- }
- if (a < c)
- {
- int tmp = a;
- a = c;
- c = tmp;
- }
- printf("%d\n", a);
- return 0;
- }
- #include <stdio.h>
-
- int main()
- {
- int a = 0;
- int b = 0;
- int c = 0;
- scanf("%d %d %d", &a, &b, &c);
- int ret = a > b ? a : b;
- ret = ret > c ? ret : c;
- printf("%d\n", ret);
-
- return 0;
- }
将最大值通过代码移到最后:
- #include <stdio.h>
-
- int main()
- {
- int arr[3] = { 0 };
- int i = 0;
- for (i = 0; i < 3; i++)
- {
- scanf("%d", &arr[i]);
- }
- int j = 0;
- for (j = 0; j < 2; j++)
- {
- if (arr[j] > arr[j + 1])
- {
- int tmp = arr[j];
- arr[j] = arr[j + 1];
- arr[j + 1] = tmp;
- }
- }
- printf("%d\n", arr[2]);
- return 0;
- }
求输入的数据中的最大值和最小值适合用打擂台的思想去做。
题目一最推荐:方法二中的代码实现2
题目二最推荐方法一