程序------>算法

时间:2022-09-02 15:16:47

一.算法:

  1、算法的定义:

   算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有序序列,并且每条指令表示一个或多个操作。即算法是描述解决问题的方法。(对于给定的问题是可以有多种 算法进行解决的)

  2.算法

  01:一刀切下式(事后修正)

        String  b="abcdefg"; //结果a,b,c,d,e,f,g
String result="";
for(int i=0;i<b.length();i++){
result+=","+b.charAt(i);//获取每一个字符
//,a,b,c,d,e,f,g
}
result=result.substring(1);
System.out.println(result);

  02.字符串的常用API  (假设修正法)

String  b="abcdefgabcd";  //求字符串中是否有重复的字符
boolean flag=false; // 假设不重复
for(int i=0;i<b.length();i++){
char c=b.charAt(i);//获取每一个字符
if(b.lastIndexOf(c)!=i){
flag=true; //重复
System.out.println("重复");
break;
}
System.out.println("不重复");
}

  03.字符串的常用API  (正则表达式)replaceAll()

 //在小括号里面的内容我们称之为子组,用$获取子组内容
String a="asasasa 2018-07-16 sasa sasas sasa";
//实现的效果是asasasa 07/16/2018年 sasa sasas sasa
a=a.replaceAll("([0-9]{4})-([0-9]{2})-([0-9]{2})","$2/$3/$1 年");
System.out.print(a);

  注:正则表达式常用的两个类

   Pattern
    01:代表正则表达式本身
    02:对我们书写的正则表达式进行预处理
    03:提高我们代码的运行效率
   Matcher
    01:代表正则表达式的计算结果
    02:实现了对正则复杂的操作

  

  04.判断某个字符串是否满足我们定义的正则表达式

String a="ABC01234";
a.matches("[A-Z]{1,3}[0-9]{3,5}"); //返回boolean

  05.鸡兔同笼

/*鸡兔共50头,脚共120只!
x+y=50;
2x+4y=120;*/ for(int x=0;x<=50;x++){
int y=50-x; //得到兔子的数量
if(2*x+4*y==120){
System.out.println(x);
System.out.println(y);
}
}

  06.枚举与剪枝   找零

/*需求:找零50元
现在有的货币是:
10元 5元 5角
100 50 5
求出所有找零方案!*/ int money=500;
for (int a = 0; a <=money/100 ; a++) { //
for (int b = 0; b <=money/50 ; b++) { //
if ((500-(a*100+b*50)<0)) break; //剪枝
int c =(500-(a*100+b*50))/5;//
if (a*100+b*50+c*5==500){
System.out.println("10元钱出现的次数=》"+a+"\t5元钱出现的次数=》"+b+"\t5角钱出现的次数=》"+c);
}
}
}

  07.枚举与剪枝  求位数

        /*需求:  数字自身平方的尾数=自身  (100W以内)
0 0
1 1
5 25
6 36
25 625*/ for (int a = 0; a <=1000000 ; a++) {
//求a的平方
int num=a*a;
if (num%10==a||num%100==a||num%1000==a||num%10000==a||num%100000==a||num%1000000==a){
System.out.println("数字本身是=》"+a+"数字的平方是=》"+num);
}
}

  08.字符串和数字的转换

String str="6789"; //字符串 需要转换成数字  6789
int result=0;
for (int i = 0; i <str.length() ; i++) {
result=result*10+str.charAt(i)-'0';
}
System.out.println(result);

  09.任意进制之间的转换

 String num="200110102"; // 3进制的数字转换成5进制的
int result=0;
for (int i = 0; i <num.length() ; i++) {
char c=num.charAt(i);
result=result*3+(c-'0');
//result=0 + (50-48) = 2
//result=2*3 + (48-48) = 6
//result=6*3 + (48-48) = 18
//result=18*3 + (49-48) = 55
//result=55*3 + (49-48) = 166
//result=166*3 + (48-48) = 498
//result=498*3 + (49-48) = 1495
//result=1495*3 + (48-48) = 4485
//result=4485*3 + (50-48) = 13457
}
System.out.println(result); //十进制 13457
String str="";
while (true){
if (result==0) break;
str+=result%5;
result=result/5;
}
System.out.println(str);
}