Online Compiler C

#include <stdio.h> int main() { int n; scanf("%d",&n); int arr[100]; int max,min; scanf("%d",&arr[0]); min=arr[0]; max=arr[0]; for(int i=0;i<n;i++) { scanf("%d",&arr[i]); if(arr[i]<min) min=arr[i]; if(arr[i]>max) arr[i]=max; } printf("%d",max-min); return 0; }
这段代码的目的是从用户输入的一串整数中找出最大值和最小值,然后输出它们的差。但代码中存在逻辑错误,导致无法正确计算最大值。

- 在循环中,你错误地将 `arr[i]=max` 写在了判断条件里。当发现当前元素大于 `max` 时,应该更新 `max` 的值为当前元素,而不是反过来把当前元素改成 `max`。正确的思路是 `max = arr[i]`。
- 另外,你已经在循环外读取了第一个数并初始化了 `min` 和 `max`,但循环内又从头开始读取所有数(包括第一个数),这会导致第一个数被重复读取。建议调整循环的起始索引,避免重复处理第一个元素。