首页 > 基础资料 博客日记

第三十五次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进行投诉反馈,一经查实,立即删除!

标签:

相关文章

本站推荐

标签云