(2014微软实习生笔试题)1.String reorder

题目:

Time Limit: 10000ms

Case Time Limit: 1000ms

Memory Limit: 256MB

 

Description

For this question, your program is required to process an input string containing only ASCII characters between 0’ and 9, or between a’ and z’ (including 09az). 

Your program should reorder and split all input string characters into multiple segments, and output all segments as one concatenated string. The following requirements should also be met,

1. Characters in each segment should be in strictly increasing order. For ordering, 9’ is larger than 0a’ is larger than 9, and z’ is larger than a’ (basically following ASCII character order).

2. Characters in the second segment must be the same as or a subset of the first segment; and every following segment must be the same as or a subset of its previous segment. 

Your program should output string <invalid input string>” when the input contains any invalid characters (i.e., outside the '0'-'9' and 'a'-'z' range).


Input

Input consists of multiple cases, one case per line. Each case is one string consisting of ASCII characters.

Output

For each case, print exactly one line with the reordered string based on the criteria above.


Sample In

aabbccdd

007799aabbccddeeff113355zz

1234.89898

abcdefabcdefabcdefaaaaaaaaaaaaaabbbbbbbddddddee


Sample Out

abcdabcd

013579abcdefz013579abcdefz

<invalid input string>

abcdefabcdefabcdefabdeabdeabdabdabdabdabaaaaaaa

 ==========================================================================================================================

思路:0-9a-z36个字符,用一个长度36int型数组存每个字符的个数,每次输出之后,N减一

效果:



代码如下:(注:这里输入输出未严格按照题目要求写,且不推荐使用gets输入,以免栈溢出覆盖函数返回地址)

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

int cnt[36] = {0};
char str[50];

int main(int argc,char* argv[])
{
	int i=0;
	int j=0;
	int max = 0;
    gets(str);    
    for(i=0;i<strlen(str);i++)
    {
		if(str[i]>=48&&str[i]<=57)
        {
			cnt[str[i]-48]++;
        }
		else if(str[i]>=97&&str[i]<=122)
        {
			cnt[str[i]-97+10]++;
        }
		else
		{
			printf("<invalid input string>\n");
			return 0;
		}
    }


   for(i=0;i<36;i++)
   {	
		if(cnt[i]>max)
			max = cnt[i];
   }
	         
	for(i=0;i<max;i++)
	{
		for(j=0;j<36;j++)
		{
			if(j>=0 && j<=9 && cnt[j]>0)
			{
				printf("%c",48+j);
				cnt[j]--;
			}
			else if(j>=10 && j<36 && cnt[j]>0)
			{
				printf("%c",97-10+j);
				cnt[j]--;
			}
		}			
	}
	printf("\n");
	
    return 0;
}

 

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页