JAVA常用数值算法,何光渝的光盘代码,谁能给我一套下载,传到CSDN下载频道就可以,我赠送可用分(没什么可回报的).
谢谢现在只能搜到PDG格式的电子书,那阅读器不爽.

解决方案 »

  1.   

    using System;
     namespace MinABS
    {
        class Program
        {
            static void Main(string[] args)
            {
                int n = 10;
                int[] a = new int[n];
                Random rand = new Random();
                int min = int.MaxValue;
                int max = int.MinValue;
                Console.WriteLine("产生了" + n + "个数据的实验数组,");
                for (int i = 0; i < n; i++)
                {
                    //赋值并且取到最大最小值
                    //a[i] = rand.Next(int.MinValue, int.MaxValue);
                    a[i] = rand.Next(-100, 0);
                    if (a[i] < min) { min = a[i]; }
                    if (a[i] > max) { max = a[i]; }
                    Console.Write(a[i] + " ");
                }
                Console.WriteLine("在O(n)内得到最大最小分别是:");
                Console.WriteLine(max + "和" + min);
                long offset = (long)max + Math.Abs((long)min);
                //规划数组的长度。每个byte有16位长
                int len = (int)(offset >> 4) + 1;
                Byte[] B = new Byte[len];
                int kkkk = 0;
                bool IsSame = false;//是否有重合点标记
                //O(n)的时间内分配到了Byte[]中。
                for (int i = 0; i < n; i++)
                {
                    offset = (long)a[i] - (long)min;
                    int index = (int)(offset >> 4);
                    int temp = B[index];
                    //把末k位变成1
                    //把右数第k位变成1      | (101001->101101,k=3)     x | (1 << (k-1))                int tempOffSet = (1 << (int)(offset & 15));                //判断重复
                    if (!IsSame)
                    {
                        kkkk = temp & tempOffSet;
                        if ((temp & tempOffSet) >= 1)
                        {
                            IsSame = true;
                            //如果题目条件是有重复点就退出,那么在这里就跳吧。
                            //为了多练习,我排除了重复点距离是0的情况。
                        }
                    }
                    //temp |= (1 << ((int)(offset & 15)));
                    //temp |= tempOffSet;
                    B[index] |= (byte)tempOffSet;
                }
                //最小距离初始为最大。            long minABS = long.MaxValue;
                long lastIndex = -1;            //在常数范围内循环,复杂度不增加。最坏的情况是32*int.MaxValue次。
                for (int i = 0; i < B.Length; i++)
                {
                    Console.WriteLine(Convert.ToString((1 << 20) | B[i], 2));
                }
                 
                for (int i = 0; i < B.Length; i++)
                {
                    //if (B[i] == 0) { continue; }
                    //在常数范围内循环,复杂度不增加。
                    for (int k = 0; k < 16; k++)
                    {
                        if (((B[i] >> k) & 1) == 1)
                        {
                            if (lastIndex >= 0)
                            {
                                long temp = (i << 4) + k - lastIndex;
                                if (temp < minABS)
                                {
                                    minABS = temp;
                                }                        }
                            lastIndex = (i << 4) + k;
                            Console.WriteLine("索引是:" + i + "  " + lastIndex + ":" + (lastIndex + min));
                        }
                    }
                }
                if (IsSame)
                { Console.WriteLine("有重合点"); }
                else
                { Console.WriteLine("无重合点"); }            Console.WriteLine("不考虑重合最小距离是:" + minABS);
                Console.WriteLine("总复杂度是:O(n)");
                // Console.WriteLine(Convert.ToString(1<<20 , 2));
                for (int i = 0; i < B.Length; i++)
                {
                    Console.WriteLine(Convert.ToString((1 << 20) | B[i], 2));
                }
                Console.ReadLine();        }
        }
    }
      

  2.   

    这本书我没有,如果楼主喜欢数值算法方法的书籍的话,我建议可以去看一下《Java 数值方法》
    一本挺有趣而且相当不错的书,在其网站上也有源代码下载的,而且作者提供了两套代码:一套
    是控制台运行的,还是一套就是将算法做成了可视化的 Applet,更形象地描述算法。
      

  3.   

                 string str = "中文字符串";            byte[] bytes = Encoding.Default.GetBytes(str);            string strBytes = string.Empty;            for (int i = 0; i < bytes.Length; i++)
                {
                    strBytes += Convert.ToString(bytes[i], 2);
                }
                byte[] B = new byte[strBytes.Length/8];        
                int j = 0;            for (int k = 0; k < strBytes.Length; )
                {
                    string a = strBytes.Substring(k, 8);
                    B[j] = Convert.ToByte(a, 2);
                    k = k + 8;
                    j++;
                }            Console.WriteLine("结果:" + Encoding.Default.GetString(B));
                Console.ReadLine();