题目如下:
AC代码如下:
#include<stdio.h>
#include<string.h>
char s[20];
int main()
{
int t;
scanf("%d", &t);
getchar();
int tmp, i;
int p = 0;
int x1, x2, x3, x4, min;
while (t--)
{
x1 = x2 = x3 = x4 = 0;
memset(s, 0, sizeof s);
p = 0;
while (1)
{
tmp = getchar();
if (tmp != '\n')
s[p++] = tmp;
else
break;
}
int count = 0;
int n = strlen(s);
int flag = 0;
for (i = n - 1; i >= 0; i--)
{
if (s[i] == '0')
{
if (flag == 1)
break;
flag = 1;
}
else
count++;
}
x1 = count;
count = 0;
flag = 0;
for (i = n - 1; i >= 0; i--)
{
if (flag == 1)
{
if (s[i] == '2')
break;
else
count++;
}
if (flag != 1)
{
if (s[i] == '5')
{
flag = 1;
}
else
count++;
}
}
x2 = count;
count = 0;
flag = 0;
for (i = n - 1; i >= 0; i--)
{
if (flag == 1)
{
if (s[i] == '5')
break;
else
count++;
}
if (flag != 1)
{
if (s[i] == '0')
{
flag = 1;
}
else
count++;
}
}
x3 = count;
count = 0;
flag = 0;
for (i = n - 1; i >= 0; i--)
{
if (flag == 1)
{
if (s[i] == '7')
break;
else
count++;
}
if (flag != 1)
{
if (s[i] == '5')
{
flag = 1;
}
else
count++;
}
}
x4 = count;
min = x1;
if (min > x2)
min = x2;
if (min > x3)
min = x3;
if (min > x4)
min = x4;
printf("%d\n", min);
}
return 0;
}
代码思路:
题的意思:删除任意的数字(也可以不删),使其可以被25整除!
首先我们可以打表找一下规律——》我们可以发现可以被25整除的数,数的倒数后两位(个位 十位)一定只有4种情况——》00 25 50 75。
所以我们可以从后往前找,一共分4种情况(00 25 50 75),每个情况有两个控制条件。我们只要确定两个数的位置,中间的数全部删除!
!!! 具体请结合代码理解。
ps:写的有点乱,因为时间有点晚,困了www。后续我可能会补充更加优质的代码,这个代码可以先看看,代码写的很暴力,从题直接出发。
刷题已经成为一种乐趣了,cf上的题都感觉很有意思(虽然很多我写不出来,但我仍在努力中)。
ACM的路越走越近,加油!!!