《算法基础课我的最爱》==》第一课(二)

简介: 《算法基础课我的最爱》==》第一课
package Demo3;
import java.util.Scanner;
/**
 * 
 * @author MZFAITHDREAM
 *
 */
public class Test7 {
//把奇数偶数互换
  //所有的基数位向left 所有的偶数位向right
  public static void main(String[] args) {
    // 创建Scanner
    System.out.println("输入数值");
    Scanner scan=new Scanner(System.in);
    int n=scan.nextInt();
        int even=n&0xaaaaaaaa;
        int odd=n&0x55555555; 
        int result= (even>>1)^(odd<<1);
        System.out.println(result);
      }
}
package Demo3;
import java.util.Scanner;
public class Test8 {
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    System.out.println("输入数值");
    Scanner scan=new Scanner(System.in);
    int n=scan.nextInt();
    isprime(n);
  }
   static void isprime(int n) {
    // TODO Auto-generated method stub
    int m=0;
    for (int i = 2; i < n; i++) {
      if(n%i==0)
        m++;
    }
    if(m==0) {
      System.out.println("为素数");
    }else {
      System.out.println("不是素数");
    }
  }
}
package Demo3;
/**
 * 2022/3/9
 */
import java.util.Scanner;
/**
 * 小白上楼梯
 * @author MZFAITHDREAM
 递归
  //找重复
  //找变化
  //找边界
 */
public class Test9 {
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    System.out.println("请输入一要上楼梯的阶数");
    Scanner sc=new Scanner(System.in);
    while(true) {
      int n=sc.nextInt();
      int res=f(n);
      System.out.println(res);
    }
  }
  private static int f(int n) {
    if(n==0)return 1;
    if(n==1)return 1;
    if(n==2)return 2;
    return f(n-1)+f(n-2)+f(n-3);
  }
}
package Demo3;
/**
 * 2022/3/9
 */
import java.util.Iterator;
import java.util.Random;
import java.util.Scanner;
public class 二维数组累加求和 {
  int[][] nums=null;
  private void init() {
    System.out.println("输入数组的阶数:");
    Scanner scanner=new Scanner(System.in);
    int n=scanner.nextInt();
    scanner.close();
    nums=new int[n][n];
    for (int i = 0; i < nums.length; i++) {
      for (int j = 0; j < nums[i].length; j++) {
        nums[i][j]=Math.random()>0?new Random().nextInt(9)+1:0;
        System.out.print(nums[i][j]+"\t");
      }
      System.out.println();
    }
    print();
  }
  private void print() {
    //利用二位数组遍历累加
    int sum=0;
    for (int i = 0; i < nums.length; i++) {
      for (int j = 0; j < nums[i].length; j++) {
        sum+=nums[i][j];
      }
    }
    System.out.println("累加"+sum);
  }
  //求*
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    new 二维数组累加求和().init();
  }
}
package Demo4;
import java.util.Scanner;
public class Test {
  int[][] nums=null;
  private void init() {
    //生成二位数组
    System.out.println("请输出数组的阶数");
    Scanner scanner=new Scanner(System.in);
    int n=scanner.nextInt();
    scanner.close();
    //创建二维数组
    nums =new int [n][n];
    int m=1;
    for (int i = 0; i < nums.length; i++) {
      for (int j = 0; j < nums[i].length; j++) {
        nums[i][j]=m++;
        System.out.print(nums[i][j]+"\t");
      }
      System.out.println();
    }
    print();
  }
  private void print() {
    //设置起点 终点坐标
    int x1=0,y1=0;
    int x2=nums.length-1,y2=nums.length-1;
    //默认从left==>right
    boolean l2r=true;
    while(x1<=x2&&y1<=y2) {
      //从left==>right
      if(l2r) {
        System.out.print(nums[x1][y1]+"\t");
        if(x1==0&&y1<y2) {
          //第一行 没有到最后的y 平移变向
          y1++;
          l2r=!l2r; 
        }else if (y1==y2) {
          //在第一行 没有到最后一Y  平移变向
          x1++;
          l2r=!l2r;
        }else {
          //上
          x1--;
          y1++;
        }
      }else {
        System.out.print(nums[x1][y1]+"\t");
        //从right到left
        if(y1==0&&x1<=x2) {
          x1++;
          l2r=!l2r;
        } else if (x1==x2) {  
          y1++;
          l2r=!l2r;
        }else {
          x1++;
          y1--;
        }
      }
    }
  }
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    new Test().init();
  }
}
package Demo4;
/**
 * 
 * @author MZFAITHDREAM
 * 有一对兔子,从出生后第3个月起每个月都生一对兔子,
 * 小兔子长到第三个月后每个月又生一对兔子,
 * 假如兔子都不死,问每个月的兔子总数为多少?
 * 第一个月 1     A
 * 第二个月 1   A
 * 第三个月 2   A  B
 * 第四个月 3     AA   B  B的第二月份
 * 第五个月 5    AAAA  B c 第三个月后每个月又生一对兔子
 * 第六个月 8    AAAAA  BB c 
 * 第七个月 13   AAAAAAAA  BBB  C D
 * 
 * 
 */
public class Test1 {
/**
 * 递归的形式
 * @param args
 */
  public static  int num(int month) {
    int temp;
    int month1=1;
    int month2=1;
    for (int i = 3; i <=month; i++) {
      //将右边的值赋给left
      temp=month2;
      month2=month2+month1;
      month1=temp;
    }
  System.out.println("打印输出的内容"+month2);
    return month2;
    }
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    num(2);
  }
}
package Demo4;
/**
 * 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,
 * 求它在第10次落地时,共经过多少米?第10次反弹多高?
 * @author MZFAITHDREAM
 *
 */
public class Test10 {
private static void fall(int num) {
  int sum=0;
  int hight=100;
  for (int i = 0; i <=num; i++) {
    sum=sum+hight;
    hight=hight/2;
  }
  System.out.println("L"+num+sum);
  System.out.println("H"+num+hight);
}
  public static void main(String[] args) {
    // TODO Auto-generated method stub
      fall(10);
  }
}
package Demo4;
/**
 *
 * @author MZFAITHDREAM
 *0-1的浮点数
 */
public class Test11 {
  public static void init() {
    // 1024  512  256 128 64 32  16   8  4  2  1
    double num=0.625;
    StringBuilder sb=new StringBuilder('0');
    while(num>0) {
      double r=num*2;
      if(r>=1) {
        sb.append("1");
        num=r-1;
      }else {
        sb.append("0");
        num=r;
      }
      if(sb.length()>32) {
        System.out.println("ERROR");
        return;
      }
    }
    System.out.println(sb.toString());
  }
  public static void main(String[] args) {
    // TODO Auto-generated method stub
      init();
  }
}
package Demo4;
import java.util.Iterator;
public class Test2 {
  /**
   * 判断101-200之间有多少个素数,并输出所有素数
   * @param args
   */
  public static void primNumber() {
    int j=0;
    for (int i = 101; i <200; i++) {
      for ( j = 2; j < i; j++) {
        if(i%j==0) {
          break;
        }
      }
      if(j==i) {
        System.out.println("输出结果"+i+" ");
      }
    }
    }
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    System.out.println("调用方法");
    primNumber();
  }
}
package Demo4;
public class Test3 {
/**
 * 打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,
 * 101到999
 * 其各位数字立方和等于该数本身。
 * 例如:153是一个 水仙花数 ,因为153=1的三次方+5的三次方+3的三次方。
 * 
 * @param args
 */
  public static void init() {
    int a=1+5*5*5+3*3*3;
    System.out.println(a);
    int b=153%100;
    int t=153%10%10;
    int o=153%10;
    System.out.println(b);
    System.out.println(t);
    System.out.println(o);
    System.out.println("=======================");
  }
  public static void narcissus() {
    for (int i = 101; i < 1000; i++) {
      int a=i%100;
      int t=i%10%10;
      int o=i%10;
      if(i==a*a*a+t*t*t+o*o*o);
      System.out.println(i);
    }
  }
  public static void main(String[] args) {
    // TODO Auto-generated method stub
      init();
    narcissus();
  }
}
package Demo4;
import java.util.Iterator;
/**
 * 将一个正整数分解质因数。例如:输入90,打印出90=2 *3 *3 *5。
 * @author MZFAITHDREAM
 *
 */
public class Test4 {
  public static void init1() {
    /*
     * int a=2*3*3*5; System.out.println(a); int b=2*3*3*5*5; System.out.println(b);
     */
  }
    public static void init(int num) {
      for (int i = 2; i <=num;) {
        if(i==num) {
          System.out.println(num);
          break;
        }else if (num%i==0) {
          System.out.println(i+" ");
          num=num/i;
        }else {
          i++;
        }
      }
    }
  public static void main(String[] args) {
    init(180);
    init1();
  }
}
package Demo4;
import java.util.Scanner;
/**
 * 利用条件运算符的嵌套来完成此题:
 * 学习成绩> =90分的同学用A表示,
 * 60-89分之间的用B表示,
 * 60分以下的用C表示。
 * @author MZFAITHDREAM
 *
 */
public class Test5 {
  private static void getGradeLevel(int nume) {
  //三元运算符
    System.out.println("该成绩为:"+(nume>=90?'A':(nume>=60?'B':'c')));
  }
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    //输入数值
      getGradeLevel(100);
      grtdetyu();
  }
//方案二
  private static void grtdetyu() {
    // TODO Auto-generated method stub
    System.out.println("请输入该学生的考试成绩:");
    Scanner scanner=new Scanner(System.in);
    int n=scanner.nextInt();
    System.out.println(n);
    if(n>=90) {
      System.out.println("该学生成绩为A");
    }else if (n>=89 ||n<=60) {
      System.out.println("该学生成绩为B");
    } else  {
      System.out.println("该学生成绩为C");
    }
  }
}
package Demo4;
/**
 * 输入两个正整数m和n,求其最大公约数和最小公倍数。
 * @author MZFAITHDREAM
 *
 */
public class Test6 {
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    init(23, 2);
  }
  private static int init(int a,int b) {
    // TODO Auto-generated method stub\
    while(b!=0) {
      int temp=b;
      b=a%b;
      a=temp;
      System.out.println(a);
    }
    return a; 
  }
}
package Demo4;
/**
 * 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
 * @author MZFAITHDREAM
 *
 */
public class Test7 {
    private static void just(String String) {
    int number=0,letter=0,space=0,other=0;  
      String  s1="[a-zA-Z]";
      String s2="[0-9]";
      String s3="\\s";
        String [] strings=String.split("");
      for (String s : strings) {
        if(s.matches(s1)) {
          letter++;
        }else if (s.matches(s2)) {
          number++;
        } else if (s.matches(s3)) {
          space++;
        } else {
          other++;
        }
      } 
      System.out.println("字符串的个数"+letter);
      System.out.println("空格的个数"+space);
      System.out.println("数字的个数"+letter);
      System.out.println("其他个数"+number);
    }
  public static void main(String[] args) {
    // TODO Auto-generated method stub
      just("AWE 48 939392 3KDN,NFD KL ");
  }
}
package Demo4;
public class Test8 {
/**
 * 求s=a+aa+aaa+aaaa+aa…a的值,
 * 其中a是一个数字。
 * 例如2+22+222+2222+22222(此时共有5个数相加)
 * ,几个数相加由键盘控制。
 * @param args
 * @return 
 */
  private static int sum(int exp,int num) {
    int sum=exp;
    int temp=exp;
    for (int i = 1; i <num ;i++) {
      temp=temp%10;
      temp=temp+exp;
      sum=sum+temp;
      System.out.println(sum);
    }
    return sum;
  }
  public static void main(String[] args) {
    // TODO Auto-generated method stub
      sum(2, 6);
  }
}
package Demo4;
/**
 * 一个数如果恰好等于它的因子之和,这个数就称为 "完数 "
 * 。例如6=1+2+3.编程 找出1000以内的所有完数。
 * @author MZFAITHDREAM
 *
 */
public class Test9 {
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    init();
  }
  private static void init() {
      for (int i = 2; i < 1000; i++) {
        int sum=0;
        for (int j = 1; j < i; j++) {
          if(i%j==0) {
            sum=sum+=j;
          }
        }
        if(sum==i) {
          System.out.println(sum);
        }
      }
}
}
相关文章
|
算法
【AcWing算法基础课】第五章 动态规划(未完待续)(3)
当然,一个人能够滑动到某相邻区域的前提是该区域的高度低于自己目前所在区域的高度。
106 0
|
存储 人工智能 算法
【AcWing算法基础课】第四章 数学知识(未完待续)(3)
根据下面公式来预处理出等式右边的组合数的值,那么等式左边就可以用等式右边已经算过的值来进行计算(有点像dp)。
79 0
|
人工智能 算法 BI
【AcWing算法基础课】第四章 数学知识(未完待续)(2)
从2到n枚举每个数,删掉其所有的倍数,枚举完之后,没有被删掉的数为质数。
106 0
|
算法 存储 内存技术
【AcWing算法基础课】第三章 搜索与图论(2)
特点:尽可能先向纵深方向搜索。使用stack实现。所需空间O(h)(h为深度)。不具有“最短性”。
79 0
【AcWing算法基础课】第三章 搜索与图论(2)
|
算法
【AcWing算法基础课】第五章 动态规划(未完待续)(1)
求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且 总价值最大 。
62 0
【AcWing算法基础课】第五章 动态规划(未完待续)(1)
|
算法 存储 内存技术
【AcWing算法基础课】第三章 搜索与图论(3)
特点:尽可能先向纵深方向搜索。使用stack实现。所需空间O(h)(h为深度)。不具有“最短性”。
107 0
【AcWing算法基础课】第三章 搜索与图论(3)
|
算法 存储 C++
【AcWing算法基础课】第三章 搜索与图论(1)
特点:尽可能先向纵深方向搜索。使用stack实现。所需空间O(h)(h为深度)。不具有“最短性”。
71 0
【AcWing算法基础课】第三章 搜索与图论(1)
|
11月前
|
算法 C++
算法基础课笔记_归并排序
思路: 两个有序的区间,合并成一个有序的区间
35 0
|
人工智能 算法 JavaScript
【AcWing算法基础课】第五章 动态规划(未完待续)(2)
给定一个如下图所示的数字三角形,从 顶部 出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点, 一直走到底层 ,要求找出一条路径,使 路径上的数字的和最大。
64 0
|
人工智能 算法
【AcWing算法基础课】第四章 数学知识(未完待续)(1)
利用秦九韶算法来实现其他进制转十进制的结果求解
76 0