筆試題:輸入一串數字,以逗號隔開,將數字排序後輸出
阿新 • • 發佈:2019-01-05
題目:輸入一串數字,以逗號隔開,將數字排序後輸出。
具體要求:如果有幾個數字是連續的,只輸出最大的和最小的數字
例如:輸入: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]==','||arr[k]=='\0')
{
num[n]=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;
}