题目限制
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 9644 通过数: 4994
【题目描述】
输出一个整数数列中不与最大数相同的数字之和。
【输入】
输入分为两行:
第一行为N(N为接下来数的个数,N ≤ 100);
第二行N个整数,数与数之间以一个空格分开,每个整数的范围是-1000,000到1000,000。
【输出】
输出为N个数中除去最大数其余数字之和。
【输入样例】
3
1 2 3
【输出样例】
3
【来源】
NO
思路
很简单的一道题,找出最大值就可以了,但是这里有一个坑!
代码分析
int main ()
{
 int n;
 scanf("%d",&n);
 int a[n+1],max,sum=0;
 for(int i=0;i<n;i++)
 {
  scanf("%d",&a[i]);
  if(i==0) max=a[0];
  else
  {
   if(a[i]>max) max=a[i];
  }
    sum+=a[i];
 }
 printf("%d",sum-max);
 return 0;
}这是一开始的代码,找出最大值,累加数组的每一个元素,最后再减去最大值,这里的坑就是,最大值可能不止是一个!
正确代码
int main ()
{
  int n;
  scanf("%d",&n);
  int a[100000],max=-1000000,sum=0;
  for(int i=0;i<n;i++)
  {
    scanf("%d",&a[i]);
    if(a[i]>max) max=a[i];
  }
  for(int i=0;i<n;i++)
  {
    if(a[i]!=max) sum+=a[i];
  }
  printf("%d",sum);
  return 0;
}









