您的位置:首页 > 其它

笔试题:输入一串数字,以逗号隔开,将数字排序后输出

2015-08-19 20:20 811 查看
题目:输入一串数字,以逗号隔开,将数字排序后输出。

具体要求:如果有几个数字是连续的,只输出最大的和最小的数字

例如:输入:1,4,6,7,9,2,3

输出:1,4,6,7,9

按照以往惯例,先写测试用例

1、输入:1,4,6,7,9,2,3 输出:1,4,6,7,9

2、输入:1,1,1,1,1,1 输出:1

3、输入:1,2,2,2,3,3,3,5 输出:1,3,5

#include<stdio.h>
#include<string.h>
#include<math.h>
//将两个逗号之间的字符变成数字
//k是逗号所在的位置
//count是逗号与前一个逗号之间的字符的个数
int CountNum(char *arr,int k,int count)
{
int result=0;
int i=0;
while(count>0)
{
float ten=pow(10,i);
result+=(arr[k-1-i]-48)*ten;
i++;
count--;
}

return result;
}

//把输入的字符串中的数字提取出来,放在num数组中
//length是arr中的字符个数
int ConverToNum(char *arr, int length, int *num)
{
int n=0;
int k=0;
int count_temp=0;
while(k<=length)
{
//如果字符是逗号或者结尾,就处理两个逗号之间的字符,转换成数字
if(arr[k]==','||a
4000
rr[k]=='\0')
{
num
=CountNum(arr,k,count_temp);
n++;
count_temp=0;
}
else
{
count_temp++;
}

k++;
}

return n;
}

//把数组中的数字从小到大排序
//这里用的是冒泡排序,你可以选择任意的排序算法
void sort(int *arr, int length)
{
int temp=0;
for(int i=0;i<length;i++)
{
for(int j=0;j<length-i-1;j++)
{
if(arr[j]>arr[j+1])
{
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}

//将数组中重复的数字剔除
int DropRepeat(int *arr,int length, int *temp)
{
temp[0]=arr[0];
int i=1;
int k=1;
while(i<length)
{
if(arr[i]!=arr[i-1])
{
temp[k++]=arr[i];
}
i++;
}
return k;
}

int main()
{
char arr[100]={'\0'};
scanf("%s",&arr);//输入字符串
int length=strlen(arr);

int num[100]={0};
int count_num=ConverToNum(arr, length, num);//把字符串中的数字提取出来

sort(num,count_num);//数组中的数字排序

int temp[100]={0};
int count_temp=DropRepeat(num,count_num,temp);//数组中重复的数字剔除

int flag=0;
printf("%d ",temp[0]);
for(int i=1;i<count_temp;i++)
{
//检查是否几个数字连续,如果和前一个后一个不满足连续的关系才输出
if(temp[i]!=temp[i-1]+1 || temp[i]+1!=temp[i+1])
{
printf("%d ",temp[i]);
}
}

getchar();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  测试