首页 > 代码库 > heu acm基础训练 1001

heu acm基础训练 1001

哈尔滨工程大学 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=http://www.mamicode.com/1;

deal(a);

value=http://www.mamicode.com/-1;

deal(b-1);

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

}

}

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

heu acm基础训练 1001