注:
- 数据太大 超出int数据类型的范围 记得数据类型开long
- 题目没看着这么简单 直接一个for循环将导致题目超时 需要拆分优化
完整代码~:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long x = sc.nextLong();
long k = sc.nextLong();
for ( ;true; --k) {
if(k == 0){break;}
x ++;
if(x % 3 == 0){x /= 3;}
if(x == 2){break;}
}
if (k > 0){
if(k % 2 == 0){x = 1;}
else {x = 2;}
}
System.out.println(x);
}
}
步骤:
- 找规律(先不考虑k) 当x能进行到 622这一步后(为输入x = 5 x + 1= 6 x / 3 = 2 得2) 之后的步骤得出x的值为1 2 1 2 1 2 1 2......我们即可将后续步骤想办法拆开
- 不难发现若是进行到该步骤后从 后往前推,k的值为2的倍数时,输出为1;反之则输出2.
- 用k--的方式实现拆分输出
for ( ;true; --k){ 表示k一直持续递减 if(k == 0){break;}表示k等于0时 退出for循环 if(x == 2){break;}表示k等于2时 退出for循环,即进行到622步骤 if (k > 0){ if(k % 2 == 0){x = 1;} else {x = 2;} }表示拆分后优化步骤 到该步骤后x值非1即2