最近在找工作,看下华为的上机试题,给的题目的答案不是太满意,自己写了个测试程序,由于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: