/************************************************************************/
/* 华为2014年机试题1:输入1--50个数字,求出最小数和最大数的和,
输入以逗号隔开(c语言) */
/************************************************************************/
#include <stdio.h>
#include <MALLOC.H>
#include <string.h>
#define N 50
void readStr(char **);
void getArray(const char * ,int *,double []);
void sort(double [],int);
int main()
{
char *str=0;
int len=0;
double num[N]={0};
readStr(&str);
getArray(str,&len,num);
sort(num,len);
return 0;
}
/************************************************************************/
/* 读取字符串 */
/************************************************************************/
void readStr(char **str)
{
char *oldStr=0;
int ch;
int len=1;
while((ch=getchar())!='\n')
{
(*str)=(char*)malloc(++len*sizeof(char));
if(oldStr)
{
strcpy(*str,oldStr);
free(oldStr);
}
(*str)[len-2]=(char)ch;
(*str)[len-1]='\0';
oldStr=*str;
}
}
/************************************************************************/
/* 解析字符串为double数组 */
/************************************************************************/
void getArray(const char * str,int *len,double num[])
{
int index=0;
int flag=1;
int point=1;
int minus=10;
while((*str)!='\0')
{
if(*str!=',')
{
if(*str=='-')
{
flag=-1;
}
else if(*str=='.')
{
point=0;
}
else if(point==1)
{
num[*len]=num[*len]*10+(*str-'0');
}
else
{
num[*len]+=(double)(*str-'0')/minus;
minus*=10;
}
}
else
{
num[(*len)++]*=flag;
if(*len>N)
break;
flag=1;
point=1;
minus=10;
}
++str;
}
if(*len<N)
num[(*len)++]*=flag;
}
/************************************************************************/
/* 找出最大最小值 */
/************************************************************************/
void sort(double num[],int len)
{
double max=num[0];
double min=num[0];
int i=1;
for(;i<len;++i)
{
if(num[i]>max)
max=num[i];
if(num[i]<min)
min=num[i];
}
printf("max(%f)+min(%f)=%f\n",max,min,max+min);
}
华为2014机试题
最新推荐文章于 2021-05-24 19:48:02 发布