题目描述
定义一个数字为幸运数字当且仅当它的所有数位都是4或者7。
比如说,47、744、4都是幸运数字而5、17、467都不是。
假设现在有一个数字d,现在想在d上重复k次操作。
假设d有n位,用d 1,d 2,...,d n表示。
对于每次操作,我们想要找到最小的x (x < n),使得d x=4并且d x+1=7。
如果x为奇数,那么我们把d x和d x+1都变成4;
否则,如果x为偶数,我们把d x和d x+1都变成7;
如果不存在x,那么我们不做任何修改。
现在请问k次操作以后,d会变成什么样子。
比如说,47、744、4都是幸运数字而5、17、467都不是。
假设现在有一个数字d,现在想在d上重复k次操作。
假设d有n位,用d 1,d 2,...,d n表示。
对于每次操作,我们想要找到最小的x (x < n),使得d x=4并且d x+1=7。
如果x为奇数,那么我们把d x和d x+1都变成4;
否则,如果x为偶数,我们把d x和d x+1都变成7;
如果不存在x,那么我们不做任何修改。
现在请问k次操作以后,d会变成什么样子。
输入描述:
第一行两个整数n,k表示d的长度和操作次数。 第二行一个数表示d。数据保证不存在前导零。 1 <= n <= 100,000 0 <= k <= 1000,000,000
输出描述:
一个数字表示答案。
思路:水题不解释,只不过要疯狂练一下java语法了啊- - 要打比赛了- - 语法都不熟悉 尴尬
String 是一个类,要获取其中每个字符要 charat(),要替换成其他字符就有点尴尬了,做法可以先把String 转换成一个字符数组,
处理完之后再转换成String类输出
代码:
import java.util.Scanner;
public class Main
{
static final int maxn = 100000 + 5;
static int pos[] = new int[maxn];
static String str = new String();
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
int n, k;
n = sc.nextInt();
k = sc.nextInt();
str = sc.next();
int len = str.length();
char[] s = str.toCharArray();
for(int i = 0; i < len-1; i++)
{
if(s[i] == '4' && s[i+1] == '7')
{
if((i+1) % 2 == 1)
{
if(i <= len-3 && s[i+2] == '7')
{
if(k%2 == 1)
{
s[i+1] = '4';
}
break;
}
else
{
s[i+1] = '4';
k--;
}
}
else
{
if(i != 0 && s[i-1] == '4')
{
if(k%2 == 1)
s[i] = '7';
break;
}
else
{
s[i] = '7';
k--;
}
}
}
}
s.toString();
System.out.println(s);
}
}