• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
youdiankun
博客园    首页    新随笔    联系   管理    订阅  订阅

2014第五届蓝桥杯JAVA本科B组_猜字母

//标题:猜字母
//把abcd...s共19个字母组成的序列重复拼接106次,得到长度为2014的串。
//接下来删除第1个字母(即开头的字母a),以及第3个,第5个等所有奇数位置的字母。
//得到的新串再进行删除奇数位置字母的动作。如此下去,最后只剩下一个字母,请写出该字母。
//答案是一个小写字母,请通过浏览器提交答案。不要填写任何多余的内容。
public class Main{
    public static void main(String[] args) {
        String s = "abcdefghijklmnopqrs";
        String str = "";
        for (int i = 0; i < 106; i++) {
            str += s;
        }
        //System.out.println(str.length());
        boolean[] flag = new boolean[str.length()];
        for (int i = 0; i < flag.length; i++) {
            flag[i] = true;        //未被删除的字母标记为true
        }
        
        int oldIndex = 0;  //旧串的下标
        int newIndex = 0;  //新串的下标
        int leftCount = str.length();  //剩余的字母数
        
        while(leftCount > 1){             //最后只剩下一个字母
            
            if (flag[oldIndex] == true) {  //如果该字母未被删除
                if (newIndex % 2 == 0) {  //看此时(新串)的下标是否需要被删除
                    flag[oldIndex] = false;   //删除该字母
                    leftCount--;         //剩余字母数-1
                }
                newIndex++;           //未被删除的字母构成新串
            }
            oldIndex++;              //旧串的遍历
            
            //得到的新串再进行删除奇数位置字母的动作,所以下标都重新置为0
            if (oldIndex == str.length()) {  
                newIndex = 0;
                oldIndex = 0;
            }
        }
        
        for (int i = 0; i < flag.length; i++) {
            if (flag[i] == true) {
                System.out.println(str.charAt(i));
                break;
            }
        }
    }
}

 

posted @ 2015-03-12 10:29  youdiankun  阅读(2210)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3