題目連結
/*20140501 hanting*/
#include <iostream>
using namespace std;
void p(int num,int a[])
{
int ten=1;
int temp=num;
while(num)
{
for(int i=0;i<num%10;i++)
{
a[i]+=ten;
}
for(int i=0;i<10;i++)
{
a[i]+=ten*(num/10);
}
a[0]-=ten;
a[num%10]+=(temp%ten)+1;
ten*=10;
num/=10;
}
}
int main()
{
int a,b;
while(cin>>a>>b && a+b)
{
int Num[10]={0};
p(a-1,Num); /*計算0到a的0~9個有幾個*/
for(int i=0;i<10;i++) Num[i]*=-1; /* 所求= 0~b - 0~(a-1) */
p(b,Num); /*計算0到b的0~9個有幾個*/
for(int i=0;i<10;i++)
{
cout<<Num[i]<<(i==9 ? '\n': ' ');
}
}
return 0;
}
================================
================================
心血來潮又來寫一次重新推出自己的公式
又一個rank 1 超夢是最強的神奇寶貝
/* 題目: UVa 12241 - Digits Count
* Language: C++
* Created on: 2016年8月1日
* Author: hanting
*/
#include <iostream>
#include <cstdio>
using namespace std;
void digitCount(int *digit, int n)
{
int tmp = n;
int base = 1;
while(tmp)
{
if(n >= base)
digit[0] -= base;
digit[tmp%10] += n%base + 1;
int t = tmp%10;
for(int i = 0; i < t; i++)
digit[i] += base;
tmp /= 10;
for(int i = 0; i < 10; i++)
{
digit[i] += tmp*base;
}
base *= 10;
}
}
int main()
{
int a, b;
while(scanf("%d%d", &a, &b) == 2 and a+b)
{
int digit[10] = {0};
int digit2[10] = {0};
digitCount(digit, a-1);
digitCount(digit2, b);
for(int i = 0; i < 9; i++)
{
//cout << digit[i] << " ";
printf("%d ", digit2[i]-digit[i]);
}
//cout << digit[9] << endl;
printf("%d\n", digit2[9]-digit[9]);
}
return 0;
}
2014年5月1日 星期四
[UVA] 12241 - Digits Count
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言