java 基础练习题(用来练手)

来源:互联网 发布:郑州淘宝运营培训班 编辑:程序博客网 时间:2024/06/02 01:52

实现类似于如下功能: 1,1,2,3,5,8,13,21.......

方法一(采用数组):

private void rubbit(int num){
        int[] vec = new int[num]; 
        vec[0] = 1;
        vec[1] = 2;
        for(int i = 2; i < num; i++){
            vec[i] = vec[i - 1] + vec[i - 2];
        }
        System.out.println("res: =" + vec[num - 1]);
    }


方法二(采用临时变量):

 private static int rubbit(int num){
        int res = 0;
        int num1 = 1, num2 = 2;
        
        if(num == 1 || num == 2){
            res = 1;
        }else{
            for(int i = 3; i <= num; i++){
                res = num1 + num2;
                num1 = num2;
                num2 = res;
            }
        }
        return res;
    }


方法三(采用递归实现):

 private static int rubbit(int num){
        int res = 0;
        if(num == 1 || num == 2){
            res = 1;
        }else{
            res = rubbit(num - 1) + rubbit(num - 2);
        }
        return res;
    }


题目:判断101-200之间有多少个素数,并输出所有素数。   
程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,   

则表明此数不是素数,反之是素数

  private static void pro(int min, int max){
        boolean flag;
        for(int i = min; i < max; i++){
            flag = true;
            for(int j = 2; j < i; j++){
                if(i  % j == 0){
                    flag = false;
                    break;
                }
            }
            if(flag){
                System.out.println( i + "\n");
            }
        }
    }

 

题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。  
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:  
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。  
(2)如果n <> k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。  
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。  

//自己实现的O(∩_∩)O~

private static void show(int num){
  String resStr = "";
        int i;
        for(i = 2; i <= num;){
            if(num  % i == 0){
                num = num / i;
                System.out.println("i: " + i);
                resStr += (i + "*");
            }else{
                i++;
             }
        }
        System.out.println(resStr.substring(0, resStr.length() - 1));
 }

 


 题目:一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3.编程   找出1000以内的所有完数。

private static void show(){
  List<Integer> lists = null;
  int i;
  for(i = 1; i < 1000; i++){
   lists = new ArrayList<Integer>();
   for(int j = 1; j < i; j++){
    if(i % j == 0){
     lists.add(j);
    }
   }
   //判断操作
   int sum = 0;
   for(int m = 0; m < lists.size(); m++){
    sum += lists.get(m);
   }
   if(sum == i){
    System.out.println(i);
   }
  }
 }

 

 

自己实现的丢手帕问题
private void show(List<Integer> all){
  int m = 0, n = 1;
   while(all.size() != 1){
    if(n % 4 == 0){
     System.out.println("移除的对象:" + all.remove(m) + " ,当前集合的长度为:" + all.size());
     n = 1;;
     m  -= 1; //因为从容器中删除了一个对象之后,联表的长度也会发生改变,所以这里需要减去1
    }else{
     ++n;
    }
    
    if(m < all.size() - 1){
     ++m;
    }else{
     m = 0;
    }
    
   }
   System.out.println("剩余的对象:" + all.get(0));
 }

 

 

 

自己写的一个小示例,用于在给定的一些数值当中随机取7个,要求取到的每一个数值都不相同。

private static void mytest(){

       int[] arrs = new int[]{1,2,3,4,5,6,7,8,9,10};

       int[] haveValue = new int[7];

       boolean flag = true;

       Random rd = new Random();

       int curIn = 0;

       boolean curflag = false; //判断是否有相同的

       for(int i = 0; i < haveValue.length; i++){

           flag = true;

           while(flag){

              curIn = rd.nextInt(arrs.length - 1);

              for(int j = 0; j <= i; j++){

                  if(haveValue[j] == arrs[curIn]){

                     curflag = true;

                     break;

                  }

              }

              if(!curflag){

                  haveValue[i] = arrs[curIn];

                  flag = false; //说明没有重复的数值

              }

              curflag = false;//进行下次循环时要置为初始状态

           }

       }

      

       for(int i = 0; i < haveValue.length; i++){

           System.out.println("随机到的数值:" + haveValue[i]);

       }

    }


//这段代码也是用于随机7个不同的数

 public static void main(String[] args) {
    // TODO Auto-generated method stub
    int[] a = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
    int loc = 0;
    for (int i = 0; i < 11; i ++){  
    loc = (int)(Math.random()*19); 
    System.out.println("loc: " + loc);
    int temp = a[i];
    a[i] = a[loc];
    a[loc] = temp;  
    }
    for (int i = 0; i < 7; i ++){
    System.out.print(a[i] + " ");
    }
 }

 

要求每7个字一组,分别横向和纵向输出古诗

public static void main(String[] args){
  char[][] arr = new char[4][7];
  String s = "朝辞白帝彩云间千里江陵一日还两岸猿声啼不住轻舟已过万重山";
  for(int i = 0; i < arr.length; i++){
   for(int j = 0; j < arr[i].length; j++){
    arr[i][j] = s.charAt(i * 7 + j);
   }
  }
  
  //横向输出
  for(int i = 0; i < arr.length; i++){
   for(int j = 0; j < arr[i].length; j++){
    System.out.print(arr[i][j]);
   }
   System.out.println();
  }
  
  //纵向输出   这个值得学习一下
  for(int i = 0; i < arr[0].length; i++){
   for(int j = 0; j < arr.length; j++){
    System.out.print(arr[arr.length - j - 1][i] + " ");
   }
   System.out.println();
  }
 }



下面是不增和式算法的解析过程,效果如注释部分所示:

    /**
     * 不增和式算法
     * 4 = 4
     * 4 = 3 + 1
     * 4 = 2 + 1 + 1
     * 4 = 1 + 1 + 1 + 1
     * @param num    要计算的数字
     */
    private void buZengHeShi(int num){
        String tempStr = null;
        int sum = 0;
        int j = 1;
        for(int i = num; i >= 1; i--){
            sum = i;
            tempStr = i + "+";
            while(sum < num){
                sum = sum + j;
                tempStr += (j + "+");
                
            }
            String printStr = tempStr.substring(0, tempStr.length() - 1);    //将后面的进行截取
            System.out.println(printStr);
            sum = 0;                                            //重新置0,以便进行下一轮的循环
            tempStr = "";
        }
    }

原创粉丝点击