挑剔的小杜
时间限制:1000 ms | 内存限制:65535 KB
难度:2
描述
小杜一直都不喜欢数学,但是他特爱语文,所以对英语也非常感兴趣。所以他也就有个习惯,一看到字母里面插有数字,一定要把他全部划去。
现在给你纸,纸上有很多既含有字母,又含有数字的句子(还包括一些标点符号)。你需要将数字找出来放在一边,并组成一个最大的数。然后逆序输出所有字母,和那个最大的数。
输入
第一行:N表示有多少组数据。
接下来的N行,每行有一句话,长度不超过1000。
输出
每句话对应输出两行。
第一行输出字母的总个数及其所有的字母(按原来输入的相反的顺序输出),中间需要一个空格分开。
第二行输出那个数字的总个数及最大的数,中间需要一个空格分开。
(如果没有字母或数字,则对应只需要输出一个0)
样例输入
2
abcabc123abc.
aaa
样例输出
9 cbacbacba
3 321
3 aaa
0
代码1:
#include<stdio.h> #include<string.h> #include<stdlib.h> int com(const void *a,const void *b) { return *(int *)a-*(int *)b; } int main(void) { int n; scanf("%d",&n); while(n--) { char str[1000],ch[1000]; int num[1000]; int count1=0,count2=0; scanf("%s",str); int j=0,k=0; for(int i=0;i<strlen(str);i++) { if(str[i]>='0'&&str[i]<='9') { num[j++]=str[i]-'0'; count1++; } if(str[i]>='a'&&str[i]<='z') { ch[k++]=str[i]; count2++; } } num[j]='\0'; ch[k]='\0'; qsort(num,count1,sizeof(num[0]),com); if(count2!=0) { printf("%d ",count2); for(int j=count2-1;j>=0;j--) { printf("%c",ch[j]); } printf("\n"); } else { printf("0\n"); } if(count1!=0) { printf("%d ",count1); for(int j=count1-1;j>=0;j--) { printf("%d",num[j]); } printf("\n"); } else { printf("0\n"); } } return 0; }
#include<stdio.h> int num[1003]; char str[1003]; int main() { int n=0,k=0,t=0,i,j,a,b=1; char ch; scanf("%d",&n); getchar(); while(n--) { for(i=0;i<=1003;i++) num[i]=0; j=0; i=0; while((ch=getchar())!='\n') { if(ch>='0'&&ch<='9') { num[i++]=ch-'0'; } if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')) { str[j++]=ch; } } str[j]='\0'; for(k=1;k<i;k++) { for(a=0;a<i-k;a++) { if(num[a]<num[a+1]) { t=num[a]; num[a]=num[a+1]; num[a+1]=t; } } } printf("%d ",j); for(k=j-1;k>=0;k--) printf("%c",str[k]); printf("\n%d ",i); for(k=0;k<i;k++) printf("%d",num[k]); printf("\n"); } }
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文:http://blog.csdn.net/qq_16997551/article/details/47009373