重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
我做模拟题是一向不行的 这道题搞了我m久 发现我对数字真的是非常不敏感~
创新互联坚信:善待客户,将会成为终身客户。我们能坚持多年,是因为我们一直可值得信赖。我们从不忽悠初访客户,我们用心做好本职工作,不忘初心,方得始终。10年网站建设经验创新互联是成都老牌网站营销服务商,为您提供成都网站设计、网站建设、网站设计、H5网站设计、网站制作、品牌网站建设、小程序开发服务,给众多知名企业提供过好品质的建站服务。只是解决了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;
}