java学习日记day2

  • 复习:1.JDK(jre+tools)-bin

2变量(一个变量只能储存一个数据)

3数据类型 基本+引用

4基本数据类型:byte ->short(char) ->int ->long ->float ->double

5运算符:&&(短路运算符) &  >>(正补零 负补一)   >>>(只补零)

二.逻辑控制语句

   1.顺序结构 2.条件分支结构(if switch) 3.循环结构(for while do.while)

    有些关于这方面的基础 就只记题目和需要记的内容了

练习1 找出公约数为5和2的数 2 当x+y大于2是求和

public static void main(String[] args){

        for(int i=1;i<=100;i++){

            if((i%5==0)&&(i%2==0))

                System.out.println(i);

        }

        Scanner a = new Scanner(System.in);

        Scanner b = new Scanner(System.in);

        int x=a.nextInt();

        int y=b.nextInt();

        if((x+y)>2)

            System.out.println(x+y);

    }

练习2 是不是闰年

   Scanner a = new Scanner(System.in);

        int x=a.nextInt();

        if((x%4==0)&&(x%100!=0)|(x%400==0))

           System.out.print("闰年");

           else System.out.print("不是闰年");

switch具有穿透性 符合第一个就会往下继续执行 加break终止 判断的变量必须是int 可以是能自动转换成int的值

练习3 输出几天后是星期几

   Scanner a = new Scanner(System.in);

        int x=a.nextInt();

        x=x%7;

        switch (x){

            case 1: System.out.println("星期4");

                    break;

            case 2: System.out.println("星期5");

                break;

            case 3: System.out.println("星期6");

                break;

            case 4: System.out.println("星期7");

                break;

            case 5: System.out.println("星期1");

                break;

            case 6: System.out.println("星期2");

                break;

            case 0: System.out.println("星期3");

                break;

            default:System.out.println("输错了");

            break;

        }

for(初值;是否进入循环;步值)初值只进行一次,步值最后进行

while(true) for(int i=1; ;I ++)都为死循环(许多关于用户的都要靠死循环来实现)

do while:必定执行一次再循环 在第一次就进不去循环时会和while产生区别。

x:for(int i=1;i<=9;i++)

            y:for(int j = i;j<=9;j++)

                break x;//可以把外循环终止

练习4:九九乘法表(没啥用的小心得:多加个“ ”可以让结果更美观)

for(int i=1;i<=9;i++)

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

                if(i*j<10)

                   System.out.print(i+"*"+j+"="+(i*j)+"   ");

                else System.out.print(i+"*"+j+"="+(i*j)+"  ");

                if(j == 9)

                    System.out.println();

            }

数组的定义三种1 int[] arr = {1,2,3,4} 2 int[] arr2 = new int[]{2,3,4,5} 3 int[] arr3=new int[]

第1种和第2种都是静态赋值(特点 在声明的时候就确定了数组的长度和元素) 在定义时就已经确定了数组的元素 2可以进行重复赋值 int[] arr2 = new int[]{2,3,4,5}后可以arr2 = new int[]{1,3,4,5}

有new可视为新的独立个体 能进行重复赋值

动态赋值 可理解为int[] arr3=new int[5]后加了{0,0,0,0,0}

默认初始值 int –> 0 double ->0.0 char ->’\u0000’ String ->null Boolean ->false

数组是引用数据类型

直接打印数组System.out.print(arr3)显示的是数组的地址

Arrays.toString(arr3) 直接遍历数组

arr是指向的地址 而不是内容

看了后面的3 4章的pdf 第3章看下来基本没有问题 第4章类 对象 封装 构造之前在c++也有过了解 但学的不扎实 想自由运用有较大距离 而且涉及到栈内存 堆内存 地址就头大 对第四章的困惑主要也是这部分 第5章看了一半 static部分有较大的困难

虽然很累 但老师给的题目已经基本完成 也开始在牛客网开始写编程题 之前没做过 感觉难度很大 希望自己能坚持 也希望自己的每日博客能坚持

早出晚归 努力学习 和之前的学习有鲜明的对比 很累 但希望最后的付出能有回报 加油!

【程序16】
题目:输出9*9口诀。     
#include<stdio.h>

int main(){

       for(int i=1;i<=9;i++)

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

            printf("%d*%d=%d ",i,j,i*j);

           if(j == 9)

              printf("\n");

         }

          

           return 1;

}

【程序17】   
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个     第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下     的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。   
#include<stdio.h>

int main(){

       int n=1;

       for(int i=1;i<=10;i++)

         n=(n+1)*2;

       printf("%d",n);

       return 1;

}

【程序18】   
题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。   #include<stdio.h>

int main(){

char a,b,c;

              for(a = 'x'; a <= 'z'; a++) {

                     for(b = 'x'; b <= 'z'; b++) {

                            if(a != b) {   //避免参赛队员重复比赛

                                   for(c = 'x'; c <= 'z'; c++) {

                                          if(a != c && b != c) {      //避免参赛队员重复比赛

                                                 if(a != 'x' && c != 'x' && c != 'z') {   //根据题意判断

                                                        printf("a和%c,b和%c,c和%c进行比赛",a,b,c);

                                                 }

                                          }

                                   }

                            }

                     }

              }

}
 

【程序19   
题目:打印出如下图案(菱形)   
     *   
   ***   
 *****   
*******   
 *****   
   ***   
     *   
#include<stdio.h>

void main()

{

    int i,j;

    for(i=1;i<=5;i++)

    {

        for(j=1;j<=5-i;j++)

            printf(" ");

        for(j=1;j<=2*i-1;j++)

            printf("*");

        printf("\n");

    }

 

}

【程序20】   
题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。 

#include<stdio.h>

int main(){

       double a[21],n=2;

       a[0]=1;a[1]=2;

       for(int i=2;i<=21;i++){

              a[i]=a[i-1]+a[i-2];

              n=n+a[i]/a[i-1];

       }

         printf("%f",n);

         return 1;

}

【程序21】   
题目:求1+2!+3!+...+20!的和   
#include<stdio.h>

int main(){

    int n=0;

       for(int i=1;i<=20;i++)

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

            n=n+i*j;

          

           return 1;

}

【程序22】   
题目:利用递归方法求5!。   
#include<stdio.h>

int main(){

   int n=0;

       for(int i=1;i<=5;i++)

    n=n*i;

    return 1;

}

【程序23】   
题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?  10 + 2*4 一个for循环 

【程序24】   
题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。   

取余数后整除10 除了几次10后等于0就是几位数 取的余数就是逆序打印的数字

【程序25】   
题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。   
5位数a if((a\10000 == a%10)&&(a%100\10 == a\1000%10))

【程序26】   
题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续   判断第二个字母。   
太简单了 没必要做

【程序27】   
题目:求100之内的素数(1是不是素数?)   
#include<stdio.h>

int main(){

    for(int i=2;i<=100;i++){   

    bool flag = false;

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

            if(i%j == 0){

            flag = true;

            break;

            }

        }

        if(flag == false)

        printf("%d\n",i);                

    }

    return 1;

}

【程序28】   
题目:对10个数进行排序 (排了8个数 一样的)  
int[] a=new int[] {35,23,21,27,37,15,29,80};

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

            int max = a[i],t;

            for(int j=i+1;j<8;j++)

                if(a[j]>max){

                    max =a[j];

                    t=a[i];a[i]=a[j];a[j]=t;

                }

            System.out.print(a[i]+"  ");

        }

【程序29】   
题目:求一个3*3矩阵对角线元素之和     
a[1][1]+a[1][3]+a[2][2]+a[3][1]+a[3][3]

【程序30】   
题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。    
int[] a=new int[] {35,23,21,27,37,15,29,80};

        int[] b=new int[9];

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

            int max = a[i],t;

            for(int j=i+1;j<8;j++)

                if(a[j]>max){

                    max =a[j];

                    t=a[i];a[i]=a[j];a[j]=t;

                }

            System.out.print(a[i]+"  ");

        }

        System.out.println();

        int x=50;

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

            int t = x;

            if(i<8)

            b[i]=a[i];

            if(x>b[i]){

                t=b[i];b[i]=x;x=t;

            }

            System.out.print(b[i]+"  ");

        }

【程序31】
题目:将一个数组逆序输出。   
排序换一下 max换min 方向反一下

【程序32】   
题目:取一个整数a从右端开始的4~7位。   
public static void main(String[] args) {

            int a=12345678;

            for (int i = 1; i <= 7; i++) {

                if(i>=4){

                    System.out.println(a%10);

                }

                a=a/10;

            }

        }

【程序33】  
题目:打印出杨辉三角形(要求打印出10行如下图)      
            1   
          1    1   
        1    2    1   
      1    3    3    1   
    1    4    6    4    1   
1    5    10    10    5    1   
…………
int[][] a= new int[10][10];

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

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

                if ((j == 0) || (i == j)) {

                    a[i][j] = 1;

                    System.out.print(a[i][j] +" ");

                } else {

                    a[i][j] = a[i - 1][j - 1] + a[i - 1][j];

                    System.out.print(a[i][j] + " ");

                }

            }

            System.out.println();

        }

【程序34】   
题目:输入3个数a,b,c,按大小顺序输出。   
15题换个顺序

【程序35】   
题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。   
int[] arr = {5, 15, 2000, 10000, 100, 4000};

 // 定义变量,保存数组中0索引的元素

 int max = arr[0];int min= arr[0]

 // 遍历数组,取出每个元素

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

 // 遍历到的元素和变量max⽐较

 // 如果数组元素⼤于max

 if (arr[i] > max) {

 // max记录住⼤值

 max = arr[i];

 }

if (arr[i] <min) {

 // min记录住⼤值

 min = arr[i];

}

arr[1]=max;arr[5]=min;

for (int i = 0; i < arr.length; i++) System.out.print(arr[i]+"  ");

【程序36】   
题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数   
假设n=8 m=3

int[] a=new int[] {35,23,21,27,37,15,29,80};

        int[] b=new int[9];

        int[] c=new int[8];

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

            int max = a[i],t;

            for(int j=i+1;j<8;j++)

                if(a[j]>max){

                    max =a[j];

                    t=a[i];a[i]=a[j];a[j]=t;

                }

            System.out.print(a[i]+"  ");

        }

        System.out.println();

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

            if(i<3){

                c[i]=a[5+i];

                System.out.print(c[i]+"  ");

            }

            else{

                c[i]=a[i-3];

                System.out.print(c[i]+"  ");

            }

        }

        System.out.println();

【程序37(重要)】   
题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。   

public static void main(String[] args) {

        Que1 que1 = new Que1();

        que1.test(10);//以10个人来测试

    }

    public void test(int totalNum) {

        int[] array = new int[totalNum];

        //赋初始值,例如10个人,初始值:【1,2,3,4,5,6,7,8,9,10】

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

            array[i] = i+1;

        }

        int size = array.length;//值不为-1的元素个数,即可用元素个数

        int flag = 0;//用来计数,数1,2,3的

        while(size > 1) {

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

                if(array[i] != -1) {

                   flag++;

                   if (flag == 3) {

                       flag = 0;//重新变成0

                       array[i] = -1;//标记这个元素已经删除,(模拟删除)

                       size--;//可用元素个数减1

                       //删除完以后,判断后面有可用元素,我们让一个小弟来做

                       int behindSize = getBeginIndexBehindSize(array,i);

                       if(behindSize<3 && behindSize >0) {

                           //把后面的元素,全部挪动到前面(不管是可用的,还是非可用的,都挪动)

                           //让一个小弟来做

                           //System.out.println("\t挪动前:"+Arrays.toString(array));

                           moveArrayElements(array, i);//移动了数组的元素

                           //System.out.println("挪动后:"+Arrays.toString(array));

                           break;

                       }

                   }

                }

            }

        }

        System.out.println(Arrays.toString(array));

    }

    //设计一个方法,给一个数组,给一个起始点,判断起始点后面(不包括起始点)有几个不为-1的元素

    private static int getBeginIndexBehindSize(int[] arr,int begin) {

        if (begin > (arr.length-1)) {

            throw new RuntimeException("begin参数的值超过了数组的索引范围");

        }

        int result = 0;

        for(int i = begin+1;i<arr.length;i++) {

            if (arr[i] != -1) {

                result++;

            }

        }

        return result;

    }

    //设计一个方法,给定一个数组,给定一个起始点,把数组从起始点开始,不包括起始点,后面的所有元素,挪动到数组的前面,前面的值相应地往后挪

    private static void moveArrayElements(int[] arr,int begin) {

        if (begin > (arr.length-1)) {

            throw new RuntimeException("begin参数的值超过了数组的索引范围");

        }

        //创建两个小数组,用来装部分元素

        int[] a = new int[begin+1];//前面那部分

        int[] b = new int[arr.length-begin-1];//后面那部分

        //创建一个大数组,用来装全部元素

        //int[] newArr = new int[arr.length];

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

            a[i] = arr[i];

        }

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

            b[i] = arr[i+begin+1];

        }

        //覆盖原来的大数组

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

            if (i<b.length) {

                arr[i] = b[i];

            }else {

                arr[i] = a[i-b.length];

            }

        }

    }

          

【程序38】   
题目:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。   
public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        String s=sc.nextLine();

        System.out.println(getline(s));

    }

    public static int getline(String s1){

        int t = s1.length();

        return t;

    }

【程序39】   
题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n   
public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        int n=sc.nextInt();

        System.out.println(math(n));

    }

    public static double math(int n1){

        double sum = 0;

        if(n1%2==0){

            for(double i=2;i<=n1;i=i+2)

                sum = sum+(1/i);

            return sum;

        }

        else {

            for(double i=1;i<=n1;i=i+2)

                sum = sum+(1/i);

            return sum;

        }

    }

【程序40】   
题目:字符串排序。(字典顺序)   
String test= "edcba";

char[] ar = test.toCharArray();

Arrays.sort(ar);

String sorted = String.valueOf(ar);

【程序41】   
题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?   
for (int i = 5; i <= 20000; i++) {

                int t=i;

                for(int j=1;j<=5;j++){

                    if(t%5==1){

                        t=(t-1)/5*4;

                        if(j==5)

                            System.out.println(i);

                    }

                }

            }

【程序42】   
题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。输入一个未加密数据,进行加密,并解密。

如:1256加密得到1076  
. public static void main(String[] args) {

        Scanner a = new Scanner(System.in);

        int x=a.nextInt();

        if(x>9999)

            System.out.print("错误");

        if(x>=1000) {

            System.out.print(jiami(x));

            int t=jiami(x);

            System.out.print(jiemi(t));

        }

    }

    public static int jiami(int a){

        int[] n=new int[4];

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

            n[i]=(a%10+5)%10;

            a=a/10;

        }

        int sum=n[0]*1000+n[1]*100+n[2]*10+n[3];

        return sum;

    }

    public static int jiemi(int a){

        int[] n=new int[4];

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

            n[i]=a%10-5;

            if(n[i]<0) n[i]=n[i]+10;

            a=a/10;

        }

        int sum=n[0]*1000+n[1]*100+n[2]*10+n[3];

        return sum;

    }

.

【程序43】   
题目:计算字符串中子串出现的次数  

例如:字符串abcewegwgegwefwre中we出现了2次;

字符串aaawersfoitngjaa中aa出现了2次 

    public static void main(String[] args) {

       

        String str = "abcewegwgegwefwre";

        String subStr = "we";

        int index = 0;

        int count = 0;

        for(; index < str.length(); ) {

            if(str.indexOf(subStr,index) != str.lastIndexOf(subStr)) {

                index += str.indexOf(subStr,index);

                count++;

            }

        }

        count++;

        System.out.println("子串重复出现了"+count+"次");

    }

}

【程序44】

题目:5文钱买一只公鸡,3文钱买一只母鸡,1文钱可以买3只小鸡,现在要用100文钱买100只鸡,那么各有公鸡,母鸡,小鸡多少只?

15i+9j+k=300

i+j+k=100

for(int i=1;i<100;i++)

            for(int j=1;j<100;j++)

                for(int k=1;k<100;k++){

                    if((15*i+9*j+k==300)&(i+j+k==100)) {

                        System.out.println(i);

                        System.out.println(j);

                        System.out.println(k);

                    }

                }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值