小乐乐和25

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/bingongzi/article/details/84729289

链接:https://ac.nowcoder.com/acm/contest/301/J
来源:牛客网

题目描述

小乐乐特别喜欢25这个数字,他想把所有的数字都变成25的倍数。
现在小乐乐得到一个数字,想问问你最少用几次操作才可以把这个数字改造成25的倍数。
对于一次操作我们可以把相邻的两位做交换,比如123经过一次操作之后就可以变成213或者132。

输入描述:

多组数据输入

对于每组数据,只有一行输入一个整数n(1 <= n <= 1000000000)。

输出描述:

如果经过最少x次操作后,这个数就变成了25的倍数,那么输出x;

如果这个数无论怎么变化都变不成25的倍数,输出-1.

示例1

输入

2018

输出

-1

示例2

输入

2020

1

说明

经过一次之后变成2200

分析:只要末尾两位数是00、25、50、75就是5的倍数,先找出每个数字所在的位置,再逐个判断最小交换次数。

代码如下:

#include<stdio.h>
#include<string.h>
int min1(int a,int b)
{
	if(a>b)
	return b;
	else
	return a;
}
int main()
{
	char s[20];
	int len,p0,p00,p2,p5,p7,i,j,d,min;
	while(scanf("%s",s)!=EOF)
	{
		len=strlen(s);
		p0=p00=p2=p5=p7=-1;
		min=0x3f3f3f3f;
		for(i=0;i<=len-1;i++)
		{
			if(s[i]=='0')
			{
				p0=p00;
				p00=i;
			}
			if(s[i]=='2')
			p2=i;
			if(s[i]=='5')
			p5=i;
			if(s[i]=='7')
			p7=i;
		}
		len=len-1;
		if(p7>=0&&p5>=0)
		{
			if(p7<p5)
			min=min1(min,len-1-p7+len-p5);
			else
			min=min1(min,len-p7+len-p5);
		}
		if(p5>=0&&p00>=0)
		{
			if(p5<p00)
			min=min1(min,len-1-p5+len-p00);
			else
			min=min1(min,len-p5+len-p00);
		}
		if(p2>=0&&p5>=0)
		{
			if(p2<p5)
			min=min1(min,len-1-p2+len-p5);
			else
			min=min1(min,len-p2+len-p5);
		}
		if(p0>=0&&p00>=0)
		{
			if(p0<p00)
			min=min1(min,len-1-p0+len-p00);
			else
			min=min1(min,len-p0+len-p00);
		}
		if(min==0x3f3f3f3f)
		printf("-1\n");
		else
		printf("%d\n",min);
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/bingongzi/article/details/84729289