现在的位置: 首页 > 综合 > 正文

去掉最大值、最小值之后剩下的个数(华为上机试题8_29_1)

2018年03月16日 ⁄ 综合 ⁄ 共 1451字 ⁄ 字号 评论关闭

最近在找工作,看下华为的上机试题,给的题目的答案不是太满意,自己写了个测试程序,由于c语言刚入门,写的程序难免有不妥之处,敬请指正!

源代码如下:

/*
 * Author :zhuang_569 
 * Time : 2014/9/7  
 * description : 去掉最大值、最小值之后剩下的个数 
 题目:
 输入一串数,以','分隔,输出所有数中去掉最大值、最小值之后剩下的个数。(其中最大值与最小值可能有多个)
 Smple input:3,3,5,3,6,9,7,9 
 Sample outPut: 3  
*/

#include "iostream"
using namespace std;

typedef  unsigned short int  INT16U;

typedef struct
{
  
  INT16U num; //去掉最大值、最小值之后剩下的个数
  INT16U buf[1000]; //输入数据缓冲区
  INT16U index; //输入数据个数

  INT16U max_val; //输入数据的最大值
  INT16U min_val; //输入数据的最小值

}INTEGER_STRUCT;

/**************全局变量声明*******************/

INTEGER_STRUCT integer;

/**************函数声明***********************/
void input(void);
void handle(void);


int main(void)
{
input();
handle();
cout<<"去掉最大值、最小值之后剩下的个数是:";
cout<<integer.num<<endl;
return 0;
}

void input(void)
{

cout<<"请输入一串数:";

char ch = getchar();

integer.max_val = 0;
integer.min_val = 65535;
INT16U flag = 0;
//输入的有效数值标志位

while(ch != '\n')
{

while((ch!=',')&&(ch!='\n'))
{
flag = 1;
integer.buf[integer.index] = integer.buf[integer.index]*10 + (ch-'0');
ch = getchar();
}

//flag的目地是获得输入数的有效个数:例如,输入23,,,34,67,2,2,等效输入23,34,67,2,2
if(flag == 1)
{
flag = 0;

//获得最大值
if(integer.buf[integer.index] > integer.max_val)
{
integer.max_val = integer.buf[integer.index];
}
//最小值
if(integer.buf[integer.index] < integer.min_val)
{
integer.min_val = integer.buf[integer.index];
}

integer.index++;
}
//此时ch = ','或则='\n'
if(ch != '\n')
{
ch = getchar();
}
else
{
break;
}
}

}

void handle(void)
{
INT16U i = 0;

for(i=0; i<integer.index; i++)
{
if((integer.buf[i]<integer.max_val) && (integer.buf[i]>integer.min_val))
{
integer.num++;
}
}
}

测试结果1:

/*
测试结果2:

 

抱歉!评论已关闭.