题意:给你两个数,让你求出这两个数之间有多少个数,这个数满足他的每一位的数都不相同。例如 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