Java学习笔记-循环

时间:2023-02-24 12:15:05

注:本系列是跟着中国Mooc上浙江大学翁恺老师的零基础学java视频学习的


第三周作业1:奇偶个数

  • 题目内容:
    你的程序要读入一系列正整数数据,输入-1表示输入结束,-1本身不是输入的数据。程序输出读到的数据中的奇数和偶数的个数。

  • 输入格式:
    一系列正整数,整数的范围是(0,100000)。如果输入-1则表示输入结束。

  • 输出格式:
    两个整数,第一个整数表示读入数据中的奇数的个数,第二个整数表示读入数据中的偶数的个数。两个整数之间以空格分隔。

  • 输入样例:
    9 3 4 2 5 7 -1

  • 输出样例:
    4 2

程序编写

import java.util.Scanner;

public class ji_ou_number {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner in = new Scanner(System.in);
        int number;
        int count1 = 0;
        int count2 = 0;
        number = in.nextInt();
        while(number != -1)
        {
            if(number%2 != 0)
            {
                count1 = count1 + 1;
            }
            else if(number%2 == 0)
            {
                count2 = count2 + 1;
            }
            number = in.nextInt();
        }
        System.out.println(count1+" "+count2);
    }

}

第三周作业2:数字特征值

  • 题目内容:
    对数字求特征值是常用的编码算法,奇偶特征是一种简单的特征值。对于一个整数,从个位开始对每一位数字编号,个位是1号,十位是2号,以此类推。这个整数在第n位上的数字记作x,如果x和n的奇偶性相同,则记下一个1,否则记下一个0。按照整数的顺序把对应位的表示奇偶性的0和1都记录下来,就形成了一个二进制数字。比如,对于342315,这个二进制数字就是001101。
    这里的计算可以用下面的表格来表示:
    Java学习笔记-循环
    按照二进制位值将1的位的位值加起来就得到了结果13。
    你的程序要读入一个非负整数,整数的范围是[0,100000],然后按照上述算法计算出表示奇偶性的那个二进制数字,输出它对应的十进制值。

  • 提示:将整数从右向左分解,数位每次加1,而二进制值每次乘2。

  • 输入格式:
    一个非负整数,整数的范围是[0,1000000]。

  • 输出格式:
    一个整数,表示计算结果。

  • 输入样例:
    342315

  • 输出样例:
    13

程序思路:
Java学习笔记-循环

程序编写:

import java.util.Scanner;

public class numberfeature {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner in = new Scanner(System.in);
        int digit;
        int count = 1;
        int sum = 0;
        int result;
        int number = in.nextInt();
        digit = number%10;
        while(digit != 0)
        {
            if ((digit%2) == (count)%2)
            {
                result = 1;
                sum = (int) (sum + result*Math.pow(2, (count -1)));
                digit = number/10;
                count = count +1;
            }
            else if ((digit%2) != (count)%2)
            {
                result = 0;
                sum = (int) (sum + result*Math.pow(2, (count -1)));
                digit = number/10;
                count = count +1;
            }
            number = digit;
            digit = number%10;
        }
        System.out.println(sum);
    }

}

注:在Mooc提交的时候要将文件名改为Main()


想说:

本次最大的心得是第一次不由自主的先画思路再写程序!然后就理清思路并正确编写了!


第四周作业1:素数和

  • 题目内容:我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推。现在,给定两个整数n和m, 0<n=m<=200 ,你的程序要计算第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数。
    注意,是第n个素数到第m个素数之间的所有的素数,并不是n和m之间的所有的素数。

  • 输入格式:
    两个整数,第一个表示n,第二个表示m。

  • 输出格式:
    一个整数,表示第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数。

  • 输入样例:
    2 4

  • 输出样例:
    15

程序编写:

import java.util.Scanner;

public class SumOfPrime {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int m = in.nextInt();
        int sum = 0;
        int cost = 0;
        //i是每个数,cost是素数的序号
        for(int i=2;cost < m;i++)
        {
            boolean flag = true;
            //judge prime
            for(int j = 2;j<=Math.sqrt(i);j++)
            {
                if(i%j==0)
                {
                    //not prime
                    flag = false;
                    break;
                }
            }
            if (flag){
                cost++;
                if(cost >= n){
                    sum = sum + i;
                }
            }           
        }
        System.out.println(sum);        
    }
}

第四周作业2:念整数

  • 题目内容:
    你的程序要读入一个整数,范围是[-100000,100000]。然后,用汉语拼音将这个整数的每一位输出出来。
    如输入1234,则输出:
    yi er san si
    注意,每个字的拼音之间有一个空格,但是最后的字后面没有空格。当遇到负数时,在输出的开头加上“fu”,如-2341输出为:
    fu er san si yi

  • 输入格式:
    一个整数,范围是[-100000,100000]。

  • 输出格式:
    表示这个整数的每一位数字的汉语拼音,每一位数字的拼音之间以空格分隔,末尾没有空格。

  • 输入样例:
    -30

  • 输出样例:
    fu san ling

程序编写:

import java.util.Scanner;

public class nian_shuzi {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner in = new Scanner(System.in);

        int cost = 0;
        int a;
        int b;
        String[] pinyin = {"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};

        int number =in.nextInt();
        if(number < 0)
        {
            System.out.print("fu ");
            number = - number;
        }
        a = number;
        // 判断是几位数,然后从头开始取数
        while(a!=0)
        {
            a = a/10;
            cost= cost +1;
        }
        //从头开始挨个取数
        for(int i = cost;i > 1 ; i --)
        {
            //取出每一位
            b = number/(int)(Math.pow(10, (i-1)));
            //取出前一位后剩下的位数数字
            number = number -b *(int)(Math.pow(10, (i-1)));
            System.out.print(pinyin[b]+" ");
        }
        //最后只剩一位
        System.out.print(pinyin[number]);

    }

}

想说:

今天的最大感受是体会到了debug的快感!太好用了以前自己学c语言的时候总是一遍遍在程序里加printf看中间的变量,现在直接在debug里就全都知道了!还能看到每一步的变化,哪怕写程序的时候思路没有那么清楚,欠缺在哪一调试也全都指导啦!