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

题目链接

时间限制: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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值