A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张鹏宇 中级黑马   /  2014-5-17 23:30  /  1789 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

a-s重复106次 重复去掉奇数最后剩下的字母。以下是我写的程序,求更快更准更狠。
  1. public class Main {

  2. public static void main(String[] args){

  3. int[] arr = new int[2015];

  4. int n = 1007;

  5. for(int i=0;i<=2014;i++){

  6. arr[i] = i;

  7. }

  8. while(n!=0){

  9. for(int i=1;i<=n;i++){

  10. arr[i] = arr[2*i];

  11. } n = n/2;

  12. }

  13. }

  14. System.out.println(arr[1]);

  15. System.out.println(arr[1]%19);

  16. }

  17. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

6 个回复

倒序浏览
看看这个行吗?
  1. public class Main {

  2.     public static void main(String[] args) {
  3.         String o = "abcdefghijklmnopqrs";
  4.         String s = "";
  5.         for (int i = 0; i < 106; i++) {
  6.             s += o;
  7.         }

  8.         while (s.length() > 1) {
  9.             if (s.length() % 2 != 0)
  10.                 s = s.substring(0, s.length() - 1);
  11.             s = s.replaceAll("[a-z]([a-z])", "$1");
  12.         }

  13.         System.out.println(s);
  14.     }

  15. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
张鹏宇 来自手机 中级黑马 2014-5-18 22:43:34
藤椅
墨香 发表于 2014-5-17 23:45
看看这个行吗?

这样不断字符串操作,太慢了
回复 使用道具 举报
张鹏宇 发表于 2014-5-18 22:43
这样不断字符串操作,太慢了

你有看到我使用正则表达式做的吗?这个算是比较快的了
回复 使用道具 举报
墨香 发表于 2014-5-19 22:09
你有看到我使用正则表达式做的吗?这个算是比较快的了

正则表达式很慢的
回复 使用道具 举报
  1. public static void n() {
  2.                 char[] cs = new char[2015];
  3.                 cs[0] = 0;
  4.                 char p = 'a';
  5.                 //赋值,一共19*106=2014个字母
  6.                 for (int i=1; i<=2014; i++) {
  7.                         cs[i] = p;
  8.                         if (p == 's') {
  9.                                 p = 'a';
  10.                         } else
  11.                                 p += 1;
  12.                 }
  13.                
  14.                 //假设i是最后剩下的值的坐标,
  15.                 int i=1;
  16.                 //i*2就是去掉奇数,如果i*2小于2014就说明这个数列的元素个数多余1个
  17.                 //一直搞到只剩1个为止
  18.                 while (i*2 <= 2014) {
  19.                         i = i*2;
  20.                 }
  21.                
  22.                 System.out.println("最后值的下标=" + i);
  23.                 System.out.println("最后值=" + cs[i]);
  24.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
没看懂 能解释下吗
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马