哈尔滨工程大学 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]即可。
时间: 2024-11-08 13:30:25