首页 > 代码库 > 挑剔的小杜
挑剔的小杜
挑剔的小杜
时间限制: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; }
代码2:
#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"); } }
挑剔的小杜
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。