找到第二高的数字

时间:2017-08-02 18:13:22

标签: c

我想在不使用数组的情况下从序列中找到第二高的数字。

说明如下。

  

给定一个整数序列作为输入,以a结尾   -1。 (也就是说,输入整数可以是正数,负数或0. A -1   在输入信号中输入结束。)

     

-1不被视为输入的一部分。

     

找到输入中的第二大数字。你可能不会使用数组。

我做的是这个。

Sample Test Cases
Input   
Test Case 1 
-840 -288 -261 -337 -335 488 -1
Output
-261
Test Case 2 
-840 -335 -1
Output
-840

示例测试用例将如下所示。

f <- function( v ) {
  if( sum(is.na(v)) > length(v)*0.25 ) return(NA)
  mean(v, na.rm = TRUE)
}

我不知道从哪里开始,哪里出错了。

4 个答案:

答案 0 :(得分:4)

我不会解决你的作业,但会提供一些提示:

  1. 您应该为变量提供明确的名称,以反映其目的。 iatempsec等名称会使代码难以理解。

  2. 您应该初始化所有变量。例如,sec的初始化有点不确定。

  3. 您不需要两个循环。

  4. 以下if是无操作(这意味着无条件执行后面的break):

    if (a == -1) ;

  5. 最后,最重要的是,在迭代数字时需要处理三种情况:

    1. 目前的数字大于迄今为止看到的最大数字。

    2. 目前的数字不大于最大值,但大于目前为止的第二大数字。

    3. 当前数字不大于第二大数字。

    4. 希望,这将为您提供足够的进展以取得更多进展。如果您遇到困难,请发布另一个问题。

答案 1 :(得分:2)

试试这个。

#include <stdio.h>
#define INT_MIN -999999;  //define minimum value

int main() {
  int input, firstMax = INT_MIN;
  int secMax = INT_MIN;
  do {
    scanf("%d", &input);
    if (input == -1)
    break;

    if(input > firstMax) {  //find new first max value
        secMax = firstMax;  //set previous max to second max
        firstMax = input;   //update first max to new value
    }
    else if(input > secMax) {
        secMax = input;     //new second max value is found. update it
    }
  } while(1); 

  printf("%d", secMax);
  return 0;
}

答案 2 :(得分:0)

这个怎么样?

编辑:适用于SUSE Linux 11上的GCC 4.3.4版本

#include <stdio.h>
#include <limits.h>

int main(void) {
  int i, a, temp, sec, largest;
  sec = INT_MIN;
  largest = INT_MIN;
  while (1) {
    scanf("%d", &a);
    if (a == -1) {
        break;
    }
    if (a > largest) {
        sec = largest;
        largest = a;
    } else if (a > sec) {
        sec = a;
    }
  }

  printf("%d", sec);
  return 0;
}

我还没有纠正一些不良的代码味道,但我只是做了一个快速而肮脏的回答

答案 3 :(得分:-1)

您可以尝试这种方式:

#include <stdio.h>
#include <limits.h>


int main() {
  int a, first = INT_MIN, sec = INT_MIN;
  while(1){
    scanf("%d", &a);
    if (a == -1)
      break;

    if(a > first) {
        sec = first;
        first = a;
    }
    else if(a > sec) {
        sec = a;
    }
  }

  printf("%d", sec);
  return 0;
}