我做模拟题是一向不行的 这道题搞了我m久 发现我对数字真的是非常不敏感~
只是解决了small data而已 large data模拟肯定是不行的
这道题 有一个点我觉得很巧妙
而且终于将sprintf sscanf strncpy 用了一下 挺好用哒~
#include
#include
#include
using namespace std;
#define MAX 2000000
int vis[MAX];
int m,n;
int count( int num )
{
int val, i, sum = 0;
char tmp[10]={0}, head[10]={0}, str[10];
sprintf(str,"%d", num);
int len = strlen(str);
for( i=0; i num 简化了计算呐!! 就是循环得到的数比num小就忽略 因为肯定已经加过了
// vis[val]!=num 是避免重复计算 题目要求 if( val>=m && val<=n && val>num && vis[val]!=num )
{
sum++, vis[val] = num;
}
}
return sum;
}
int main()
{
int nCase = 1, i, cas, tot;
freopen("./new.in", "r", stdin);
freopen("./new.out", "w", stdout);
scanf("%d", &cas);
while( cas-- )
{
tot= 0;
scanf("%d %d", &m, &n);
memset(vis,-1, sizeof(vis));
for( i=m; i<=n; i++ )
{
tot+= count(i);
}
printf("Case #%d: %d
", nCase++, tot);
}
return 0;
}