zoukankan      html  css  js  c++  java
  • 《内蒙古自治区第十三届大学生程序设计竞赛试题_H 公孙玉龙》

    这个题有点小坑,最坑的地方就是  输入的b 变量  有可能 是  负数  !   负数 !  负数!    对 ,你没有看错,就是负数,坑死我了,

    一直都是  content.charAt(0) 判断是不是  数字 如果不是数据就是负数,但是!!!!   -号  也是数字啊,然后就一直卡在这里,剩下的思路就简单了

    问题 H: 公孙玉龙

    内存限制:128 MB时间限制:1 S标准输入输出
    题目类型:传统评测方式:文本比较上传者:外部导入
    提交:88通过:22
    返回比赛      提交      提交记录

    题目描述

    公孙玉龙创造了一门动态类型编程语言,他想出了一种垃圾回收的方式。
    现在有若干个赋值语句,每个赋值语句由a和b组成。变量名仅由小写和大写字母组成,已知a是一个变量名。整数对象为长度不超过100的整数。如果b是一个整数对象,那么表示bb整数对象被a所引用。如果b是一个变量名,那么表示a引用b所引用的整数对象,并且保证b变最在之前已被赋值。
    如果一个数对象没有被任何一个变量所可用,则该整数对象被系统回收。如果两个整数对象的值相同,则它们是同一个整数对象。请你输出最终有多少个整数对象没有被回收。

    输入格式

    第一行包含一个正整数T(1≤T<100)代表测试数据组数。每一组数据第一行为一个正整数n(1≤n≤100),接下来n行每行由a,b组成,表示将b赋值给a,其中a为变量名,b为变量名或一个整数对象,1≤|a|,|b|≤100。

    输出格式

    对于每一组数据,输出最终有多少个整数对象没有被回收。

    输入样例 复制

    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 }
  • 相关阅读:
    第05组 Beta版本演示
    第05组 Beta冲刺(4/4)
    第05组 Beta冲刺(3/4)
    第05组 Beta冲刺(2/4)
    第05组 Beta冲刺(1/4)
    第05组 Alpha事后诸葛亮
    第05组 Alpha冲刺(4/4)
    第05组 Alpha冲刺(3/4)
    第05组 Alpha冲刺(2/4)
    300iq Contest 3 C. Cells Blocking
  • 原文地址:https://www.cnblogs.com/kangxinxin/p/10770877.html
Copyright © 2011-2022 走看看