蓝桥训练赛:hihoCoder#1649 : 漏写的数字

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/belous_zxy/article/details/85058937

题目链接

时间限制:10000ms

单点时限:1000ms

内存限制:256MB

描述

小A今年刚上幼儿园,正在学习写100以内的数字。幼儿园的老师留了一项作业,要求小A从某个100以内的数X开始一直写到另一个100以内的数Y(Y - X > 1)。  

不过粗心的小A在作业中漏写了一个整数(好在小A漏写的不是X,并且至少写下了2个整数)。给定小A写下的数字串,你能求小A漏写的数字是多少吗?

输入

一个只包含数字的字符串。注意小A至少写下了两个数。

输出

小A漏写的数字。

样例输入

9111213

样例输出

10
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#include<string.h>
char input[10000]={0};
int main(int argc,char **argv)
{
	scanf("%s",input);
	char *cp=input,*for8;
	int len=strlen(input);
	int s1,s2,s3;
	if(len==2)
	{
		sscanf(input,"%1d%1d",&s1,&s2);
		if(s1==s2-2)
			printf("%d\n",s1+1);
		else
			printf("%d\n",s2+1);
		return EXIT_SUCCESS;
	}
	if(len==3)
	{
		sscanf(input,"%1d%2d",&s1,&s2);
		if(s2==10||s2==11)
		{
			if(s2-s1==2)
				printf("%d\n",s1+1);
			else
				printf("%d\n",s2+1);
			return EXIT_SUCCESS;
		}
		sscanf(input,"%1d%1d%1d",&s1,&s2,&s3);
		if(s1==s2-1&&s2==s3-1)
			printf("%d\n",s3+1);
		else if(s2==s1+2)
			printf("%d\n",s1+1);
		else if(s3==s2+2)
			printf("%d\n",s2+1);
		return EXIT_SUCCESS;
	}
	sscanf(input,"%2d%2d",&s1,&s2);
	if(s2-s1<=2&&s2-s1>0)
	{
		if(s2==s1+2)
		{
			printf("%d\n",s1+1);
			return EXIT_SUCCESS;
		}
		cp+=4;
		while(cp<input+len)
		{
			s1=s2;
			sscanf(cp,"%2d",&s2);
			cp+=2;
			if(s2==s1+2)
			{
				printf("%d\n",s1+1);
				return EXIT_SUCCESS;
			}
		}
		printf("%d\n",s2+1);
		return EXIT_SUCCESS;
	}
	sscanf(input,"%1d",&s1);
	cp++;
	while(cp<input+len)
	{
		if(s1==9)
		{
			sscanf(cp,"%2d",&s2);
			cp+=2;
		}
		else if(s1==8)
		{
			sscanf(cp,"%2d",&s2);
			if(s2!=10)
			{
				sscanf(cp,"%1d",&s2);
				cp++;
			}
			else
				cp+=2;
		}
		else if(s1<8)
		{
			sscanf(cp,"%1d",&s2);
			cp++;
		}
		else
		{
			sscanf(cp,"%2d",&s2);
			cp+=2;
		}
		if(s2-s1==2)
		{
			printf("%d\n",s1+1);
			return EXIT_SUCCESS;
		}
		s1=s2;
	}
	printf("%d\n",s2+1);
	return EXIT_SUCCESS;
}

根据前几位确定出是从一位数开始还是两位数,8和9需要分情况讨论。

END

猜你喜欢

转载自blog.csdn.net/belous_zxy/article/details/85058937