2-16 HDO1106
这题寒假也没搞出来,但今天花了一小时终于搞定。
题意是输入一串数字字符,把‘5’当作空格,然后把被分割开的数字进行排序输出。
首先是字符串输入,按照高精度的处理方法,数值低位放到数组低位。(字符串型的S转到整形的A)
然后,开始对A数组遍历,将第i位的数值乘以10的i次方,累加到B数组(整形)。遇到5则continue,当然还要对累加时的变量进行重置。
上述的做法有两个点要特别注意到,如果A数组的最后一位不是5,而整个数组里5的数量不为0,则B数组的个数要加1,二是如果数组里5的数量为0,则B的个数也要加1。
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #include <iostream> 5 #include <algorithm> 6 using namespace std; 7 8 int main() 9 { 10 char s[1005]; 11 int a[1050],b[300],i,j,slen,ilen,pos,top,dou,sum; 12 while(scanf("%s",s)!=EOF) 13 { 14 memset(b,0,sizeof(b)); 15 slen = strlen(s); 16 sum = 0; 17 for(i=slen-1,j=0; i>=0; i--) 18 { 19 a[j] = s[i] - '0'; 20 if(a[j] == 5) 21 sum ++; 22 j++; 23 } 24 if(a[0] == 5) 25 { 26 i = 1; 27 } 28 else 29 { 30 i = 0; 31 } 32 for(top=0,dou=1; i<slen; i++) 33 { 34 if(a[i]==5 && a[i-1] == 5) 35 continue; 36 if(a[i] == 5) 37 { 38 pos = i; 39 dou = 1; 40 top++; 41 continue; 42 } 43 else 44 { 45 b[top] += a[i]*dou; 46 dou*=10; 47 } 48 } 49 if(a[slen-1] != 5 && sum!=0) 50 top++; 51 if(sum == 0) 52 top++; 53 sort(b,b+top); 54 for(i=0; i<top-1; i++) 55 printf("%d ",b[i]); 56 printf("%d\n",b[top-1]); 57 } 58 return 0; 59 }
必须不断的提醒自己:放下浮躁,静心阅读;放下担忧,勇敢走自己的路;放下贪婪,有失必有得;放下自卑,相信自己;放下虚荣,别自以为是;放下自私,学会懂得感恩;放下懒惰,继续努力。