hdoj1106

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1106
这道题题意是将一串数字串以5为界分割成若干整数。看来本菜鸟的代码实现能力还是有待提高。。其实一直挺不喜欢字符串题的,虽然没有什么算法,但是一些细节足够折腾你半天了。。
思路:使用一个队列,用gets读入一行,从左开始遍历每个字符串中的每个字符。如果不是5,则将其入队,否则察看队列是否为空。若不空说明前面已入队一个完整整数,此时将其出队并转成整型。若为空,则说明前面的数字也为5。
最后考虑特殊情况,当字符串为5123时,由于最后面没有5,所以最后一个整数会留在队列中未被处理。所以最后要判断队列是否为空,若不空,则输出最后一个整数(当然,其实是转换到一个整型数组里,最后对这个数组排序就行了)

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
#include<math.h>
using namespace std;
int queue[1000];
int a[1000];
int iq=0;
int main()
{
	char s[1000];
	while(gets(s))
	{
		int i;
		iq=0;
		int count=1;
		int len=strlen(s);
		memset(a,0,sizeof(a));
		for(i=0;i<=len-1;i++)
		{
			if(s[i]!='5')
				queue[iq++]=s[i]-'0';
			else
			{
				if(iq!=0)
				{
					for(int j=0;j<=iq-1;j++)
						a[count]=a[count]*10+queue[j];
					iq=0;
					count++;
				}
			}
		}
		if(iq!=0)
		{
			for(int j=0;j<=iq-1;j++)
						a[count]=a[count]*10+queue[j];
			iq=0;
			count++;
		
		}
		count--;
		sort(a+1,a+1+count);
		printf("%d",a[1]);
		for(i=2;i<=count;i++)
			printf(" %d",a[i]);
		printf("\n");



	}
//system("pause");
return 0;
}

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>