这个题有点小坑,最坑的地方就是 输入的b 变量 有可能 是 负数 ! 负数 ! 负数! 对 ,你没有看错,就是负数,坑死我了,
一直都是 content.charAt(0) 判断是不是 数字 如果不是数据就是负数,但是!!!! -号 也是数字啊,然后就一直卡在这里,剩下的思路就简单了
2
3
TNT 2
SNS 3
BNB 3
5
T 2
N 2
T N
S 3
B 3
2
2
思路:
使用一个Map<String ,String> 用来描述 变量之间的赋值关系
1.首先判断 b 是一个数字 还是一个字符串
1.1 如果是数字 map.put(a,b)
1.2 如果是一个变量 map.put(a,map.get(b))
2.然后遍历 将map 中的数据循环加入 set中 ,使用set 自动去重复。
最后上Java 代码实现
1 import java.util.HashMap; 2 import java.util.HashSet; 3 import java.util.Map; 4 import java.util.Scanner; 5 import java.util.Set; 6 7 public class Main { 8 9 public static boolean isNumber(String content) 10 { 11 for(int i=0; i<content.length(); i++) 12 { 13 if( content.charAt(i) == ‘-‘ && i==0 ) 14 { 15 continue; 16 } 17 else if( content.charAt(i)>‘9‘ || content.charAt(i)< ‘0‘ ) 18 { 19 return false; 20 } 21 } 22 return true; 23 } 24 public static void main(String[] args) { 25 Scanner cin = new Scanner (System.in); 26 Map<String, String> map = new HashMap<>(); 27 Set<String> set = new HashSet<>(); 28 29 int t = cin.nextInt(); 30 for(int count = 0;count<t;count++){ 31 map.clear(); 32 set.clear(); 33 int n = cin.nextInt(); 34 for(int i = 0;i<n;i++){ 35 String a = cin.next(); 36 String b = cin.next(); 37 38 if(isNumber(b)){ 39 map.put(a,b); 40 }else{ 41 map.put(a,map.get(b)); 42 } 43 } 44 45 for (String key :map.keySet()) { 46 set.add(map.get(key)); 47 } 48 49 System.out.println(set.size()); 50 } 51 52 53 } 54 55 }
《内蒙古自治区第十三届大学生程序设计竞赛试题_H 公孙玉龙》
原文:https://www.cnblogs.com/kangxinxin/p/10770877.html