题意:给你两个数,让你求出这两个数之间有多少个数,这个数满足他的每一位的数都不相同。例如 113 不满足 143 满足。
code:
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<string.h>
#include<string>
#include<vector>
#include<math.h>
#define max1(a,b) a>b?a:b
using namespace std;
bool is(int i)
{
int a,b,c,d,e;
a=i%10;
b=i%100/10;
c=i%1000/100;
d=i%10000/1000;
e=i%100000/10000;
if(e==0&&d==0&&c==0&&b==0)
{
return true;
}
else if(e==0&&d==0&&c==0&&b!=0)
{
if(b!=a)
return true;
}
else if(e==0&&d==0&&c!=0)
{
if(a!=b&&a!=c&&b!=c)
return true;
}
else if(e==0&&d!=0)
{
if(a!=b&&a!=c&&a!=d&&b!=c&&b!=d&&c!=d)
return true;
}
else if(e!=0)
{
if(a!=b&&a!=c&&a!=d&&a!=e&&
b!=c&&b!=d&&b!=e&&
c!=d&&c!=e&&
d!=e)
return true;
}
return false;
}
int a[100005];
int main()
{
a[1]=1;
for(int i=2; i<=99999; i++)
{
if(is(i))
a[i]=a[i-1]+1;
else
a[i]=a[i-1];
}
a[100000]=a[99999];
int t;
scanf("%d",&t);
while(t--)
{
int c,b;
scanf("%d%d",&c,&b);
printf("%d\n",a[b]-a[c-1]);
}
}#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int temp[10];
int ans[100001];
int i,j,n,a,b;
int fun1(int x)//用于判断数字是否满足条件
{
int mod;
memset(temp,0,sizeof(temp));
while(x != 0)
{
mod = x % 10;
if(temp[mod])
return 0;
else
temp[mod]++;
x /= 10;
}
return 1;
}
int main()
{
for(i = 1;i < 100001;i++)
{
if(fun1(i))
ans[i] = ans[i-1] + 1;
else
ans[i] = ans[i-1];
}
scanf("%d",&n);
while(n--)
{
scanf("%d%d",&a,&b);
printf("%d\n",ans[b] - ans[a-1]);
}
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/stffer/article/details/47312039