例1:【递归方法】计算两个非负整数 p 和 q 的最大公约数
public static int gcd1(int p, int q){
// 若q为0,则最大公约数为p
if(q == 0) {
return p;
}
int r = p % q;
return gcd1(q, r);
}
// 【辗转相除】 计算两个非负整数 p 和 q 的最大公约数
public static int gcd2(int p, int q){
if(q == 0) {
return p;
}
while(p%q != 0){
int r = p % q;
p = q;
q = r;
}
return q;
}
// 改进版【辗转相除】 计算两个非负整数 p 和 q 的最大公约数
public static int gcd3(int p, int q){
while(q != 0){
int r = p % q;
p = q;
q = r;
}
return p;
}
// 计算两个非负整数 p 和 q 的最小公倍数
public static int lcm(int p, int q){
int p1 = p;
int q1 = q;
while(q != 0){
int r = p % q;
p = q;
q = r;
}
return (p1*q1)/p;
}
例2:请说出在main方法分别调用fun1 ,fun2,fun3
的结果
public static void fun1()
{
int i = 2;
switch(i)
{
case 1:
System.out.print(1+"\t");
case 2:
System.out.print(2+"\t");
case 3:
System.out.print(3+"\t");
default:
System.out.println("总之不是 1 2 3");
}
}
public static void fun2()
{
int i = 2;
switch(i)
{
default:
System.out.println("总之不是 1 2 3");
case 1:
System.out.print(1+"\t");
case 2:
System.out.print(2+"\t");
case 3:
System.out.print(3+"\t");
}
}
public static void fun3()
{
int i = 56;
switch(i)
{
default:
System.out.println("总之不是 1 2 3");
case 1:
System.out.print(1+"\t");
case 2:
System.out.print(2+"\t");
case 3:
System.out.print(3+"\t");
}
}
:
例3:根据你输入的年和月算出该月有多少天
(闰年满足(能被400整除)或(能被4整除并且不能被100整除))
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner = new Scanner(System.in);
System.out.print("请输入年份:");
int year = scanner.nextInt();
System.out.print("请输入月份:");
int month = scanner.nextInt();
int day = 0;
switch (month) {
case 1:;case 3: ; case 5: ; case 7: ; case 8: ; case 10: ; case 12 : day = 31; break;
case 4:;case 6: ; case 9: ; case 11: day = 30; break;
case 2: day = year % 4 == 0 ? 29 : 28;
default : break;
}
System.out.println(year + "年" + month + "月一共有" + day + "天");
}
例4::输入年月日,判断这是该年的第几天
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner = new Scanner(System.in);
System.out.print("请输入年份:");
int year = scanner.nextInt();
System.out.print("请输入月份:");
int month = scanner.nextInt();
System.out.print("请输入日期:");
int date = scanner.nextInt();
int day=0;
for (int i = 1; i < month; i++) {
switch (i) {
case 1:case 3:case 5:case 7:case 8:case 10:case 12:
day = day +31;
continue;
case 4:case 6:case 9:case 11:
day = day + 30;
continue;
}
}
if (year%4==0&&month>2) {
day = day +29;
}else if (month>2){
day = day +28;
}
day = day + date;
System.out.println("今天是"+year+"年的第"+day+"天");
}
例5: 敲7:打印出1到200之间所有应敲的数
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
System.out.println("请输入范围的上限");
int n = sc.nextInt();
System.out.println("请输入范围的下限");
int m = sc.nextInt(); // 获取控制台输入的数字
SevenKnock(m,n);
}
public static void SevenKnock(int m,int n) {
for (int i = m; i <= n; i++) { // 遍历m-n以内的所有整数
if (i % 7 == 0 || hasSeven(i)) { // 如果能被7整除或者含有7这个数字就打印出来
System.out.println(i);
}
}
}
public static boolean hasSeven(int i) {
String s = String.valueOf(i);
if (s.contains("7")) {
return true;
}
return false;
}
for (int i = m; i <= n; i++) { // 遍历m-n以内的所有整数
if (i % 7 == 0 || hasSeven(i)) { // 如果能被7整除或者含有7这个数字就打印出来
System.out.println(i);
}
}
}
public static boolean hasSeven(int i) {
String s = String.valueOf(i);
if (s.contains("7")) {
return true;
}
return false;
}
例6: 猴子吃桃子问题:猴子第一天摘下若干套子,当即吃了一半,还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃了一半,又多吃了一个,以后每天都吃前一天剩下的一半多一个。到第10天的时候再想吃桃子时,只剩下一个套子。求第一天摘了多少个套子。
代码如下:
// 前一天的桃子的数目时后一天桃子的数目+1 再乘2 也就是第10天是1个 第9天则是:(1+1)*2个
public static void main(String[] args) {
int n =1 ;
int day = 10;
while(day>1){
n=(n+1)*2;
day--;
}
System.out.println("吃了"+n+"个");
}
结果为:1534
例7:有1020个西瓜,第一天卖掉总数的一半后又多卖掉两个,以后每天卖剩下的一半多两个,问几天可以卖完。
注:我们需要一个变量来标记天数。
public static void main(String[] args) {
int n = 1020;
int day=0;
do{
n=n-n/2-2;
day++;
}while (n>0);
System.out.println(day);
}
结果是 8
例8:兔生兔问题,我们规定一对兔子从出生后第三个月开始可以生一队兔子。假如一年内没有发生死亡,设一年后(12个月)能繁殖为多少对?
分析:斐波那契数列。
1,1,2,3,5,8,13,21,…
public static void main(String[] args) {
int a=1;
int b=1;
int temp;
for(int i=2;i<12;i++){
temp = b;
b=a+b;
a=temp;
}
System.out.println(b);
}
结果为:144
例9:计算1+2-3+4-5+6-7+…+100的值
public static void main(String[] args) {
int sum=1;
for(int i = 2;i<=100;i++){
if(i%2==0){
sum+=i;
}else {
sum-=i;
}
}
System.out.println(sum);
}
结果为 52