题目背景
http://www.luogu.com.cn/problem/U419395
题目描述
给定 L,R,x,y,求 [L,R] 内有多少个整数a满足将a写成十进制后,从高位到低位不存在两个连续的数位恰好是xy(10x+y)?
(因为......)。
例如在数 12345 中,存在的上述连续数位有12,23,34,45。
在数 12312 中,存在的上述连续数位有12,23,31,12。
输入格式
输入数据一行,包括 L,R,x,y。
输出格式
输出一行一个数,表示满足题目要求的数的个数。
解题思路:暴力(极易超时)
在输入输出后,先开一个l--r的for循环,用于枚举l--r的数
for(int i=l;i<r;i++)
在这个循环中判断符合条件的i。首先用从个位开始分离i,但由于i的位数未知,所以用while循环
while(i>=10)
{
。。。。。。
i=i/10;
}
这个循环的作用就是将i分离成个位。
因为i是从个位开始分离的,所以xy也要从个位开始变成yx来判断。如果分出的数=y,
那么就触发对x的判断。如果新分出的数又=x,ans++。 反之,continue。
if(i%10==y)
if((i-i%10)%10==x)
{
ans++;
continue;
}
(x的判断数并不是从i的循环中被分出的,而是判断被触发后手动打表达式求出)
题目求不符合这个条件的数,所以输出的是
cout<<(r-l+1)-ans;
完整代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long l,r,x,y,ans=0;
cin>>l>>r>>x>>y;
for(int i=l;i<r;i++)
while(i>=10)
{
if(i%10==y)
if((i-i%10)%10==x)
{
ans++;continue;
}
i=i/10;
}
cout<<(r-l+1)-ans;
}
创作不易,望多加支持。