1. 程式人生 > >筆試題:輸入一串數字,以逗號隔開,將數字排序後輸出

筆試題:輸入一串數字,以逗號隔開,將數字排序後輸出

題目:輸入一串數字,以逗號隔開,將數字排序後輸出。
具體要求:如果有幾個數字是連續的,只輸出最大的和最小的數字
例如:輸入: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; }