Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1436534
  • 博文数量: 241
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 2253
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-11 22:27
个人简介

--

文章分类

全部博文(241)

文章存档

2021年(3)

2019年(6)

2018年(1)

2017年(9)

2016年(21)

2015年(50)

2014年(125)

2013年(26)

我的朋友

分类: C/C++

2014-03-10 20:16:24

题目:
输入任意多个整形数字(不重复),中间以逗号隔开,然后排序,然后在排序中只取连续部分的开始和结尾部分,然后输出,以空格隔开。紧挨着连续的数字串进保留最小与最大。
例如:1,2,3,4,5,7,8------>1 5 7 8
代码:

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <string.h>

  3. #define MAX 100

  4. int myAtoi(char *str)
  5. {
  6.     int sum = 0;
  7.     if (NULL == str)
  8.     {
  9.         return sum;
  10.     }
  11.     while(*str != '\0')
  12.     {
  13.         sum = sum*10 + *str-'0';
  14.         str++;
  15.     }
  16.     return sum;
  17. }

  18. int getData(char* str,int data[])
  19. {
  20.     int count = 0;
  21.     char str_data[10] = {'\0'};
  22.     int i=0;

  23.     if (NULL == str)
  24.     {
  25.         return 0;
  26.     }

  27.     while (*str != '\0')
  28.     {
  29.         if (*str == ',')
  30.         {
  31.             data[count++] = myAtoi(str_data);
  32.             i=0;
  33.             memset(str_data,'\0',10);
  34.         }
  35.         else
  36.         {
  37.             str_data[i++] = *str;
  38.         }
  39.         str++;
  40.     }
  41.     if (i>0)
  42.     {
  43.         data[count++] = myAtoi(str_data);
  44.     }
  45.     return count;
  46. }

  47. void bubble(int data[],int N)
  48. {
  49.     int i;
  50.     int j;
  51.     int tmp;
  52.     for(i=0; i<N; i++)
  53.     {
  54.         for(j=i+1; j <N; j++)
  55.         {
  56.             if (data[i] > data[j])
  57.             {
  58.                 tmp = data[i];
  59.                 data[i] = data[j];
  60.                 data[j] = tmp;
  61.             }
  62.         }
  63.     }
  64. }

  65. void delSerial(int data[],int N)
  66. {
  67.     int i;
  68.     int j;
  69.     int k;
  70.     int front;
  71.     for (i=0; i<N; i++)
  72.     {
  73.         front = i;
  74.         for(j=i+1; j<N; j++)
  75.         {
  76.             if (data[j]-data[front] == 1)
  77.             {
  78.                 front = j;
  79.             }
  80.             else
  81.             {
  82.                 break;
  83.             }
  84.         }
  85.         for(k=i+1; k<front; k++)
  86.         {
  87.             data[k] = -1;
  88.         }
  89.         i = j;
  90.     }
  91. }

  92. int main()
  93. {
  94.     int data[MAX] = {0};
  95.     int count = 0;
  96.     int i;
  97.     char str[MAX]={'\0'};

  98.     scanf("%s",str);
  99.     count = getData(str,data);

  100.     bubble(data,count);
  101.     delSerial(data,count);

  102.     for(i=0; i<count; i++)
  103.     {
  104.         if (data[i] != -1)
  105.         {
  106.             printf("%d ",data[i]);
  107.         }
  108.     }
  109.     return 0;
  110. }
注意:声明变量均要放置在程序的开始位置。
阅读(1033) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~