题目描述
给定两个数L和R,求L到R之间(包括L和R)有多少个数是“优雅”的。 称一个数是优雅的,当且仅当把这个数看成一个长度为n的字符串(没有前导零),n个字符中n-1个字符全相同,有且仅有一个字符不同。例如,33323、110都是优雅的,而9779、55555都不是优雅的。
输入格式
一行两个数L和R。
输出格式
一行一个数,表示L到R之间有多少个数是优雅的。
样例数据
input
110 133
output
13
样例解释 13个数是:110,112,113,114,115,116,117,118,119,121,122,131,133。
数据规模与约定
1<=L,R<=10^11
时间限制:1s
空间限制:256MB
这道题的标签是模拟,我用了一种时间复杂度非常高的解法,前面6个点都能对,但是后面4个点就超时了。救救我这个蒟蒻吧!!
60分代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int num[10] = {0};//计数用
int L,R,x,n,cnt = 0,a;
cin>>L>>R;
for(int i = L;i <= R;i ++)
{
n = 0;
x = i;
while(x)//遍历数字,取出每一位,计数
{
n ++;
a = x % 10;
x = x / 10;
num[a] = num[a] + 1;
}
for(int j = 0;j <= 9;j ++)
{
if(num[j] == n - 1)
{
cnt ++;
}
num[j] = 0;
}
}
cout<<cnt<<endl;
return 0;
}