2012 ACM/ICPC Asia Regional Tianjin Online
Faulty Odometer
题目给出码表读数,要求输出实际走的公里数。
(码表遇见3或8就会向后跳,3→4,8
→9,每位数字都会这样。)
思路:
按照从低位向高位的顺序,依次计算跳表数。
代码:
#include
#include
int main()
{
_int64
num
,
temp
,
count;
int
a
[
10
],
i
,
j
,n;
while(
scanf(
"%I64d"
,
&
num
),
num
!=
0)
{
temp
=
num;
count
=
0;
for(
i
=
0;
temp
!=
0;
temp
/=
10
,
i
++)
a
[
i
]
=
temp
%
10;
i
--;
for(n
=
0;n
<=
i;n
++)
{
for(
j
=
i;
j
>=n;
j
--)
{
if(
j
-
1
-n
>=
0)
//最低位至最高位的前一位
{
if(
a
[
j
]
==
9)
count
+=
7
*
pow(
8.0
,
j
-
1
-n)
*(
2
*
pow(
10.0
,n));
else
if(
a
[
j
]
>=
4)
count
+=(
a
[
j
]
-
1)
*
pow(
8.0
,
j
-
1
-n)
*(
2
*
pow(
10.0
,n));
else
count
+=
a
[
j
]
*
pow(
8.0
,
j
-
1
-n)
*(
2
*
pow(
10.0
,n));
}
else
//最高位
{
if(
a
[
j
]
==
9)
count
+=
2
*
pow(
10.0
,n);
else
if(
a
[
j
]
>=
4)
count
+=
pow(
10.0
,n);
}
}
}
printf(
"%I64d: %I64d
\n
"
,
num
,
num
-
count);
}
return
0;
}
#include
int main()
{
}