两行,第一行为n,表示n个成绩,不会大于10000.
第二行为n个成绩(整数表示,范围为0~100),以空格隔开。
输出描述
一行,输出n个成绩中最后高分和最低分数的差。
//F1:假定max=0, min=100;
#include<stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
//输入n个值
int arr[100] = { 0 };
int i = 0;
int max = 0;
int min = 100;
for (i = 0; i < n; i++)
{
scanf_s("%d", &arr[i]);
if (max < arr[i])
{
max = arr[i];
}
if (min > arr[i])
{
min = arr[i];
}
}
//输出
printf("%d", max - min);
return 0;
}
//F2:冒泡排序
//问题在于arr初始创建的数组大小是多少就是多少,不会由n决定,比如arr[10],但n=5
//输入成绩时arr[i]中存入的数据是:{99,98,97,95,91,0,0,0,0,0}
//所以输出的时候要格外注意,不能用首位减去末尾。除非初始定义的元素个数就等于输入n的数
#include <stdio.h>
void test(int* str, int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{
int j = 0;
for (j = 0; j < sz - i -1; j++)
{
if (str[j] < str[j + 1])
{
int t = str[j];
str[j] = str[j + 1];
str[j + 1] = t;
}
}
}
}
int main()
{
int n = 0;
scanf_s("%d", &n);
int arr[5] = { 0 };
int i = 0;
for (i = 0; i < n; i++)
{
scanf_s("%d", &arr[i]);
}
int sz = sizeof(arr) / sizeof(arr[0]);
test(arr, sz);
int ret = arr[0] - arr[4];
printf("%d", ret);
return 0;
}
//F3:常规迭代找最大值和最小值
//这种方法跟冒泡排序最大不同处在于不用考虑数组大小,因为能直接找出来最大值和 最小值
#include <stdio.h>
int main()
{
//输入成绩有几个
int n = 0;
scanf_s("%d", &n);
int arr[10] = { 0 };
//输入n个成绩
int i = 0;
for (i = 0; i < n; i++)
{
scanf_s("%d", &arr[i]);
}
int max = arr[0];
for (i = 0; i < n; i++)
{
if (max < arr[i])
{
max = arr[i];
}
}
int min = arr[1];
for (i = 0; i < n; i++)
{
if (min > arr[i])
{
min = arr[i];
}
}
int ret = max - min;
printf("%d", ret);
return 0;
}
还有一种求法是假定第一个元素值是最大值或最小值,然后从最后一位开始比较递减,交换也可以求出来。