OJ 系列之整数排序
2016-01-25 19:17
323 查看
1、问题描述
实现输入一组大于等于0的整数,根据从小到大的顺序排序后输出,排序后有连续数时,
只输出连续数中最小和最大的两个数。
一组大于等于0的整数,不考虑非法输入,各个整数之间以逗号(“,”)分隔,
输入字符串的总长度小于等于100个字节。
排序后的值,各个整数之间以空格分隔。
2、解题思路
1、首先从输入字符串inputStr按规律取出数字,然后存储到一个数组中(大小为50,初始值全部为0);2、对数字进行冒泡法排序
3、排序之后去掉连续的数字,留下连续数字首尾,用后面数覆盖舍去的数字。
3、代码实现
#include <stdio.h> #include <stdlib.h> #include <string.h> void sort(int a[],int N) { /*冒泡法*/ for(int i=0;i<N;i++) { for(int j=1;j<N;j++) { int temp; /*交换*/ if(a[j-1]>a[j]) { temp=a[j-1]; a[j-1]=a[j]; a[j]=temp; } } } } void move(int a[],int curPos,int ContiIndex) { /*后面的覆盖前面的数*/ while(a[curPos+ContiIndex]!=-1) { a[curPos+1]=a[curPos+ContiIndex]; curPos++; } a[curPos+1]=-1; } void SortForIngter(char *inputStr) { if(!inputStr) return; /*考虑到字符串中有','因此数字长度不会大于50*/ int a[50]; int i = 0,index =0; /*1.用于存储字符串中整数*/ for(int i=0;i<50;i++) { a[i]=-1; } int inputStrlen = strlen(inputStr); int temp = 0; /*不考虑非法输入*/ for(i = 0;i<=inputStrlen;i++) { if(inputStr[i]==','||i==inputStrlen) { a[index] = temp; index ++; temp = 0; } else { temp = temp*10 + inputStr[i]-'0'; } } /*2.排序*/ sort(a,index); /*3.去连续,留首尾*/ int curPos = 0; int j = 0; int ContiIndex = 0; while (a[curPos] != -1 && a[curPos+2] != -1) { j=curPos; ContiIndex=0; while(a[j] != -1 && a[j+1] != -1) { if(a[j+1] == a[j]+1) { ContiIndex ++; j++; } else { break; } } if(ContiIndex>=2) { move(a,curPos,ContiIndex); } curPos++; } i = 0; while(a[i] != -1) { printf("%d ",a[i]); i ++; } printf("\n"); } int main() { char inputStr[101]; gets(inputStr); SortForIngter(inputStr); // getchar(); // getchar(); return 0; }
相关文章推荐
- 【OJ日志】超级约瑟夫
- 【OJ日志】爬楼梯
- 【OJ日志】删除升序数组的重复数字
- 几个比较大的在线提交系统(Online Judge)
- 初学ACM - 半数集(Half Set)问题 NOJ 1010 / FOJ 1207
- LeetCode-Rotate Array
- LeetCode-Sudoku Solver
- LeetCode-Minimum Window Substring
- HDU 1000
- HDU 1001
- sjtu online judge 1034 二哥的金链
- hdu 1005 -- Number Sequence
- LeetCode OJ: Binary Tree Postorder Traversal
- LeetCode: Binary Tree Level Order Traversal II
- 1001. 害死人不偿命的(3n+1)猜想 (15)
- UVA 424和10106的个人体会
- POJ 3629
- UVa 133
- UVA 673
- 几道简单题的巧妙解题思维-woj 1537