18.身高排序
输入一组身高在170到190之间(5个身高),比较身高差,选出身高差最小的两个身高;若身高差相同,选平均身高高的那两个身高;从小到大输出:
如输入:170 181 173 186 190 输出:170 173
#include<stdio.h>
int main(void)
{
int pInputStr[5]={0};
int pOutputStr[2]={0};
int height_diverse[4]={0};
int i,j,temp,min_diverse=100;
printf("Input 5 heights:\n");
for(i=0;i<5;++i)
scanf("%d",&pInputStr[i]);
for(i=0;i<4;++i)
{
for(j=0;j<4-i;++j)
{
if(pInputStr[j]>pInputStr[j+1]) //冒泡升序排列
{
temp=pInputStr[j];
pInputStr[j]=pInputStr[j+1];
pInputStr[j+1]=temp;
}
}
}
for(i=0;i<4;++i)
height_diverse[i]=pInputStr[i+1]-pInputStr[i]; //升序排列,相邻之间的差为最小差
for(i=0;i<4;++i)
min_diverse=(min_diverse<height_diverse[i])?min_diverse:height_diverse[i]; //最小身高差
for(i=0;i<4;++i)
{
if(height_diverse[i]==min_diverse) //因为升序排列,当出现相同身高差时,平均身高大的会覆盖平均身高小的
{
pOutputStr[0]=pInputStr[i];
pOutputStr[1]=pInputStr[i+1];
}
}
printf("The minist diverse height: %d,%d",pOutputStr[0],pOutputStr[1]);
return 0;
}
19.数字大小
输入一串字符,只包含“0-10”和‘,’找出其中最大和最小数字(可能不止一个),输出最后剩余数字。如输入:3,3,4,5,6,77 输出:4,5,6 输入:2,5,4,10,5,2 输出:5,4,5
#include<stdio.h>
#include<string.h>
void DeleteMinMax(char *pInputStr, int StrLength, int *pOutputStr)
{
int i,j=0,k=0,max_number=0,min_number=50;
int pOutputStr_Int[50]={0};
for(i=0;i<StrLength;)
{
if(pInputStr[i]==',')
++i;
else if(pInputStr[i+1]=='0') //10的情况
{
pOutputStr_Int[j++]=10;
i+=2;
}
else //0-9的情况
pOutputStr_Int[j++]=pInputStr[i++]-48; //0-9字符转换成对应的数字
}
for(i=0;i<j;++i)
{
max_number=(max_number>pOutputStr_Int[i])?max_number:pOutputStr_Int[i];
min_number=(min_number<pOutputStr_Int[i])?min_number:pOutputStr_Int[i];
}
for(i=0;i<j;)
{
if(pOutputStr_Int[i]==max_number||pOutputStr_Int[i]==min_number)
++i;
else //输出除了最大最小值之外的数字
pOutputStr[k++]=pOutputStr_Int[i++];
}
for(i=0;i<k;++i)
printf("%d,"pOutputStr[i]);
}
int main(void)
{
char pInputStr[50];
int pOutputStr[50]={0};
int StrLength,i;
printf("Input the numbers and use ',' to seperate each other:\n");
gets(pInputStr);
StrLength=strlen(pInputStr);
DeleteMinMax(pInputStr,StrLength,pOutputStr);
return 0;
}