zoukankan      html  css  js  c++  java
  • 憨批是我

    数组中只有一个数出现了1次 其他数都出现了K次 请输出只出现一次的数  

    java 代码加分析

    /**
     * 
     */
    package com;
    
    
    /**
     * 
     * 信1605-1 HJJ
     * 
     * 数组中只有一个数出现了1次 其他数都出现了K次 请输出只出现一次的数
     * K 个k进制数做不进位加法结果为0 例如 二进制 的1 +1 不进位=0
     * 
     * 因此把数组中的数做不进位加法的最终结果是落单的数
     * 
     * 111    012
     *        012
     *        ----
     *         021
     *         012
     * 0
     * 111
     * -----
     * 
     */
    public class Test4 {
        private static int K=3;//出现的次数
        private static int lengthi=-1;//arrint数组中化简为二进制的最大 位数
        public static void main(String[] args) {
            int arrint[]= {6,6,6,2,2,2,3,4,5,5,5,4,4,600,600,600};//自己构造的数组
            //获取最大位数lengthi
            for (int i = 0; i < arrint.length; i++) {
                if (lengthi<Integer.toString(arrint[i], K).toCharArray().length) {
                    lengthi=Integer.toString(arrint[i], K).toCharArray().length;
                }
                
            }
            System.out.println("当数组转成"+K+"进制后字符串最长长度为"+lengthi);
    
            
            char sum[]=new char[lengthi]; //总的计算结果临时变量
            
            /**
             * 这里需要翻转数组因为加法的时候 一定低位和低位加  当然别的方法也可以只要不加错位就行
             *     new StringBuffer().append(Integer.toString(arrint[i], K).toCharArray()).reverse(); 
                例如 二进制 1100
                               1存放在数组中反过来 1 排在数组第一位 1100 最后那个0也在第一位 这样循环起来方便
             * 
             * 
             * 
             * 
             * */
            
            for (int i = 0; i < arrint.length; i++) {
             StringBuffer  s=new StringBuffer().append(Integer.toString(arrint[i], K).toCharArray()).reverse(); 
              for (int j = 0; j < lengthi; j++) {
                
                  if (j<s.length()) {
                      sum[j]=  intToChar((charToInt(sum[j])+charToInt(s.charAt(j)))%3);
                    
                     
                }
                 
            }
              
                
            }
            
            StringBuffer ss=new StringBuffer().append(sum).reverse();
            
            System.out.println("落单的数为"+Integer.parseInt(ss.toString(), K));
            //Integer.parseInt(ss.toString(), K) 把字符串转成相关进制数  应该只能是无符号(不能出现负数了)数有弊端
            
            
        }
        
        /*
         * char 转int  直接强转数值不对
         *     
         * 
         * */
        public static int  charToInt(char ch) {
            int num=0;
            if (Character.isDigit(ch)){  // 判断是否是数字
                 num = (int)ch - (int)('0');
                return num;
            }
            return num;
            
        }
        /*
         * int 转char  直接强转数值不对 对于ASCII表看看就知道
         *     
         * 
         * */
        public static char  intToChar(int ch) {
            String ss= String.valueOf(ch);
           
            return ss.toCharArray()[0];
        }
        
        
        
    
    }
  • 相关阅读:
    C#判断网络链接状态
    C# 创建临时文件(转帖)
    C# 很久以前几个常用类
    正则附表
    如何判断WebBrowser浏览器网页加载完成
    控件阴影
    C# 使用WM_COPYDATA传输数据(两个窗体间通信)
    C# 调用POST请求
    改变无边框窗体的尺寸大小和移动无边框窗体
    IT学习网站
  • 原文地址:https://www.cnblogs.com/xuexidememeda/p/12766829.html
Copyright © 2011-2022 走看看