版权声明:本文为博主原创文章,未经博主允许不得转载。 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需要分情况讨论。