注:本系列是跟着中国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里就全都知道了!还能看到每一步的变化,哪怕写程序的时候思路没有那么清楚,欠缺在哪一调试也全都指导啦!