首页 > 基础资料 博客日记
第三十五次CCF-CSP认证字符串变换(第二题)Java题解(80分)
2024-10-29 03:00:08基础资料围观54次
文章第三十五次CCF-CSP认证字符串变换(第二题)Java题解(80分)分享给大家,欢迎收藏Java资料网,专注分享技术知识
解题方法:记录从1到max(m)的查询结果,再根据查询输出
注:题目在文末
我的题解:
import java.io.BufferedInputStream;
import java.util.Scanner;
public class Main2 {
public static void main(String[] args) {
Scanner sc = new Scanner(new BufferedInputStream(System.in));
char[] cs = sc.nextLine().toCharArray();//定义并输入原始的字符串
int len = cs.length;//原始字符串长度(包括前后两个‘#’)
int[] css = new int[len];//在后续循环的时候,判断该字符串某位置是否有变动
int n = sc.nextInt();//字符对个数
char[] cc = sc.nextLine().toCharArray();//消除一个按行输入
char[][] c = new char[n][4];//定义字符对数组
for (int i = 0;i < n;i++) {//输入字符对
c[i] = sc.nextLine().toCharArray();
}
int m;//定义查询个数
m = sc.nextInt();//输入查询个数
int[] k = new int[m];//定义m个查询的数组
for (int i = 0;i < m;i++) {//输入m个查询
k[i] = sc.nextInt();
}
int max = 0;//定义max找到查询的最大值(次数)
for (int i = 0;i < m;i++) {//找到max
max = Math.max(max, k[i]);
}
char[][] kk = new char[max][len];//定义一个数组记录从1-max的查询(变换)
int ii = 0;//第几个变换
while (max-- > 0) {//循环max次填充kk数组
for (int i = 0;i < n;i++) {//用i循环遍历各个字符对
for (int j = 0;j < len;j++) {//用j循环遍历原始字符串并更改(可能已经更新)
if (css[j] == 0 && cs[j] == c[i][1]) {//如果第j+1个字符在for循环(i)里没有遍历过并且符合字符对变换则修改原始字符串并将css数组相应位置标为1
cs[j] = c[i][2];
css[j] = 1;
}
}
}
for (int i = 0;i < len;i++) {//遍历kk[i]数组,将更改后的原始字符串传入kk[i],并取消css标记
kk[ii][i] = cs[i];
css[i] = 0;
}
ii++;//变换次数加一
}
for (int i = 0;i < mm;i++) {//根据之前的查询数组输出查询结果
int x = k[i];
for (int j = 0;j < len;j++) {
System.out.print(kk[x - 1][j]);
}
System.out.println();
}
}
}
解题注意:当字符串的某个位置在本次变换中前面的字符对遍历过了,本次变换应该保持不变;同时,题目没有说查询保证顺序或递增,因此需要用到记录的方法
题目:
文章来源:https://blog.csdn.net/weixin_74948120/article/details/142487777
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签: