编者按:其实编者没什么好按的,但是为了装逼,还是写一下编者按吧。附上翁恺老师慕课链接:https://www.icourse163.org/learn/ZJU-1001541001?tid=1450243457#/learn/announce
下面是引用翁恺老师的话:
循环是计算思维的典型体现
最近两周是关于循环的,在所有的教科书中,这些内容是一章的。但是我们实际上课的时候,往往会用两周甚至三周的时间来慢慢讲。我们本来已经准备好了120分钟的视频,打算就这样一次性交给大家。但是,就算我们可以急赤白脸地讲完了,你们未必能吭哧吭哧地学完。所以,我们还是分开两周,一点点发布给你。其实就循环的语法而言,根本用不了两周。之所以要讲得慢,是因为循环体现的是计算机的思维方式,对于我们人类,循环是不自然的,谁没事儿会给自己编个循环像机器人一样生活呢。所以循环这两周,重点不是学习怎么写循环代码,重点是体会如何把我们对问题的理解,转化成用循环的手段来解决。我们准备的每一个视频,都是一个问题的例子,帮助你建立用循环解决问题的概念,顺便学习Java语言有些怎样的工具来解决问题。
if语句可以判断条件是否满足,满足时才做相应的动作,而循环语句可以在满足条件时,不断地重复执行一些动作。
重复执行的语句(循环语句)可以多次执行其他语句,它检查一个逻辑条件是否满足,只在满足的时候执行它的循环体。
我们既要学习解决问题的方法,也要掌握解决问题的手段和工具。人和动物的区别就在于制造和使用工具,编程语言的语句和结构就是我们解决问题的工具。方法很重要,可是没有了工具依然无法解决问题。所以尽管语言本身有很多细枝末节的规定,该知道的还是得知道。要不然,空有做大事的思想,没有做大事的能力,还不是一事无成么。
2020年03月02日 08:33
——翁恺老师
1奇偶个数(5分)
题目内容:
你的程序要读入一系列正整数数据,输入-1表示输入结束,-1本身不是输入的数据。程序输出读到的数据中的奇数和偶数的个数。
输入格式:
一系列正整数,整数的范围是(0,100000)。如果输入-1则表示输入结束。
输出格式:
两个整数,第一个整数表示读入数据中的奇数的个数,第二个整数表示读入数据中的偶数的个数。两个整数之间以空格分隔。
输入样例:
9 3 4 2 5 7 -1
输出样例:
4 2
import java.util.Scanner;
public class Main {
private static Scanner in;
public static void main(String[] args) {
// TODO Auto-generated method stub
in = new Scanner(System.in);
int a;
int ou = 0;//偶数个数(小白的起变量名的水平也就到这里了(狗头
int ji = 0;//奇数个数
a = in.nextInt();//输入第一个数
while (a != -1)//以-1为结束标志
{
a = a%2;//判断为偶数
if (a == 0)
{
ou = ou+1;
}
else//判断为奇数
{
ji = ji+1;
}
a = in.nextInt();//输入第二个数
}
System.out.println(ji+" "+ou);
}
}
2数字特征值(5分)
题目内容:
对数字求特征值是常用的编码算法,奇偶特征是一种简单的特征值。对于一个整数,从个位开始对每一位数字编号,个位是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 Main {
private static Scanner in;
public static void main(String[] args) {
// TODO Auto-generated method stub
in = new Scanner(System.in);
int a;
int b;
int c = 0;
int count = 0;
a = in.nextInt();//输入
while(a > 0)
{
count = count+1;
b = a%10;//取a的个位数
if ((count%2==0)&&(b%2==0) || (count%2==1)&&(b%2==1))
{
c = (int) (c+Math.pow(2,count-1));
}
a = a/10;//将a的个位数舍弃
}
System.out.println(c);
}
}