码迷,mamicode.com
首页 > 其他好文 > 详细

heu acm基础训练 1001

时间:2014-11-30 14:10:17      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:哈尔滨

哈尔滨工程大学 online judge acm训练之分治算法

原题大意:求a ,b,之间的数有多少个1,包括a,b.

这题典型的分治算法;

举例说明:

以197为例:

那么我们将其分为个位,十位,个位7上有一个,那么在190~197上有7+1个

然后整十位上的为18,即197/10-1,然后其权值将变为10。如此进行。

源代码:

#include<stdio.h>

#define N 11

int d[N],value;

int deal(int n)

{

int one ,ten ;

if(t<=0)

one=n%10;

ten=n/10;

n/=10;

for(int i=0;i<=one;i++)

d[i]+=value;

while(ten)

{

d[ten%10]+=value*(one+1);

ten/=10;

}

for(int i=0;i<N;i++)

d[i]+=value*n;

d[0]-=value;

value*=10;

deal(n-1);

}

int main()

{

int a,b;

while(scanf("%d%d",&a,&b))

{

if(!a,!b)

break;

if(a<b)

swap(a,b);

value=1;

deal(a);

value=-1;

deal(b-1);

printf("%d\n",d[1]);

}

}

d【】中存有0~9的个数,题目的话只用d[1]即可。

heu acm基础训练 1001

标签:哈尔滨

原文地址:http://blog.csdn.net/qq_17502787/article/details/41621881

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!