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=1;

deal(a);

value=-1;

deal(b-1);

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

}

}

d【】中存有0~9的個數,題目的話只用d[1]即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章