您的位置:首页 > 编程语言 > Java开发

Java学习笔记-循环

2017-10-21 21:50 274 查看
注:本系列是跟着中国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。

这里的计算可以用下面的表格来表示:



按照二进制位值将1的位的位值加起来就得到了结果13。

你的程序要读入一个非负整数,整数的范围是[0,100000],然后按照上述算法计算出表示奇偶性的那个二进制数字,输出它对应的十进制值。

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

输入格式:

一个非负整数,整数的范围是[0,1000000]。

输出格式:

一个整数,表示计算结果。

输入样例:

342315

输出样例:

13

程序思路:



程序编写:

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里就全都知道了!还能看到每一步的变化,哪怕写程序的时候思路没有那么清楚,欠缺在哪一调试也全都指导啦!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java