Description
Scrooge McDuck keeps his most treasured savings in a home safe with a combination lock. Each time he wants to put there the treasures that he's earned fair and square, he has to open the lock.
![](https://i-blog.csdnimg.cn/blog_migrate/dbee840ac94d4efcb847c75249dc061c.png)
The combination lock is represented by n rotating disks with digits from 0 to 9 written on them. Scrooge McDuck has to turn some disks so that the combination of digits on the disks forms a secret combination. In one move, he can rotate one disk one digit forwards or backwards. In particular, in one move he can go from digit 0 to digit 9 and vice versa. What minimum number of actions does he need for that?
Input
The first line contains a single integer n (1 ≤ n ≤ 1000) — the number of disks on the combination lock.
The second line contains a string of n digits — the original state of the disks.
The third line contains a string of n digits — Scrooge McDuck's combination that opens the lock.
Output
Print a single integer — the minimum number of moves Scrooge McDuck needs to open the lock.
Sample Input
5 82195 64723
13
Hint
In the sample he needs 13 moves:
- 1 disk:
- 2 disk:
- 3 disk:
- 4 disk:
- 5 disk:
#include <stdio.h>
#include <math.h>
int main()
{
char a[1000],b[1000];
int i,n,count=0,ant;
scanf("%d",&n);
scanf("%s",a);
scanf("%s",b);
for(i=0; i<n; i++)
{
ant=a[i]-b[i];
if(fabs(ant)>5)
count+=(10-fabs(a[i]-b[i]));
else
count+=fabs(a[i]-b[i]);
}
printf("%d\n",count);
return 0;
}
这道题需要注意输入格式,字符串大小控制,代码的效率问题。很多思想其实都可以实现。下面还有我之前一个超时代码,希望大家可以给我建议。
#include <stdio.h>
int main()
{
char a[200],b[200];
int i,n,count=0;
scanf("%d",&n);
scanf("%s",a);
scanf("%s",b);
for(i=0; i<n; i++)
{
if(a[i]>b[i])
{
if(a[i]-b[i]<5)
count+=(a[i]-b[i]);
if(a[i]-b[i]>5)
count+=(10-a[i]+b[i]);
}
else
{
if(b[i]-a[i]<=5)
count+=(b[i]-a[i]);
if(b[i]-a[i]>5)
count+=(10-b[i]+a[i]);
}
}
printf("%d\n",count);
return 0;
}