简单语法的编程练习题

今天针对一些练习题,使用Java进行了解答,以下的习题是我在学习中感觉比较重要的一些例如求质数,水仙花数,九九乘法表等。

1、互换两个数的值(不允许使用中间变量)

要求:不允许使用中间变量。
分析:这里的核心实际上就是算法问题
重点在于:理解变量的概念

public class Test8 {
    
    
 public static void main(String[] args) {
    
    
 int k1 = 10, k2 = 100;
 System.out.println("k1=" + k1 + ",k2=" + k2);
 k1=k1+k2;
 k2=k1-k2;
 k1=k1-k2;
 System.out.println("k1=" + k1 + ",k2=" + k2);
 }
}

2、输出三个数中的最大值和最小值

int k1 = 1, k2 = 2, k3 = 3;
int max;
int min = max = k1;
if (max < k2)max = k2;
if (max < k3)max = k3;
if (min > k2)min = k2;
if (min > k3)min = k3;
System.out.println("min:" + min + ",max:" + max);

3、输出1-100的奇数(每行输出6个)

分析:因为循环次数已知,所以最佳使用for
一般建议开发中先完成重要的核心要求,再考虑进一步完善

public class Test8 {
    
    
 public static void main(String[] args) {
    
    
 for (int k = 1; k <= 100; k++) {
    
    
 if(k%2!=0)
 System.out.println(k);
 }
 }
}

进一步需求:每行输出6个

int count = 0;
for (int k = 1; k <= 100; k++) {
    
    
 if (k % 2 != 0) {
    
    
 System.out.print(k + "\t");
 if (++count % 6 == 0)
 System.out.println();
 }
}

实际上如果了解算法,可以进一步简化编码,提高执行效率
奇数+2=奇数,而且1-100之间的最小奇数为1

public class Test8 {
    
    
 public static void main(String[] args) {
    
    
 int count = 0;
 for (int k = 1; k <= 100; k = k + 2) {
    
    
 System.out.print(k + "\t");
 if (++count % 6 == 0)
 System.out.println();
 }
 }
}

4、1-100求和(for while等三种循环写法)

死循环跳出的写法
while(true)----break 一般用于无法提前预知循环次数

public class Test8 {
    
    
 public static void main(String[] args) {
    
    
 int res = 0;
 int k = 1;
 while (true) {
    
    
 res += k++;
 if (k > 100)
 break;
 }
 System.out.println("1+2+3+...+100=" + res);
 }
}

do/while—break; 一般不使用do…while(true) 一般用于至少需要执行一次的场景

public class Test8 {
    
    
 public static void main(String[] args) {
    
    
 int res = 0;
 int k = 1;
 do {
    
    
 res += k++;
 if (k > 100)
 break;
 } while (true);
 System.out.println("1+2+3+...+100=" + res);
 }
}

for循环

public class Test8 {
    
    
 public static void main(String[] args) {
    
    
 int res = 0;
 int k = 1;
 for(;;) {
    
     //三个表达式均为空
 res+=k++;
 if(k>100)
 break;
 }
 System.out.println("1+2+3+...+100=" + res);
 }
}

5、1-100奇数求和

例如:用continue语句来计算1~10中所有偶数之和

public class Test8 {
    
    
 public static void main(String[] args) {
    
    
 int res = 0;
 for (int i = 1; i < 11; i++) {
    
    
 if (i % 2 != 0)
 continue;
 res += i;
 }
 System.out.println("2+4+...+10=" + res);
 }
}

输出直角三角形

public class Test8 {
    
    
 public static void main(String[] args) {
    
    
 int k=5;
 for(int i=1;i<=k;i++) {
    
    
 for(int j=0;j<i;j++) {
    
    
 System.out.print("*");
 }
 System.out.println();
 }
 }
}
public class Test8 {
    
    
 public static void main(String[] args) {
    
    
 int k=5;
 for(int i=1;i<=k;i++) {
    
    
 for(int j=0;j<k-i;j++)
 System.out.print(" ");
 for(int j=0;j<i;j++)
 System.out.print("*");
 System.out.println();
 }
 }
}

菱形
解析:查找规律
空格数为【5-行数】,后续输出的 * 个数为【 2*行数-1 】

扫描二维码关注公众号,回复: 13123333 查看本文章
int k=5;
for(int i=1;i<=k;i++) {
    
    
 for(int j=0;j<k-i;j++)
 System.out.print(" ");
 for(int j=0;j<2*i-1;j++)
 System.out.print("*");
 System.out.println();
}
for(int i=k-1;i>0;i--) {
    
    
 for(int j=0;j<k-i;j++)
 System.out.print(" ");
 for(int j=0;j<2*i-1;j++)
 System.out.print("*");
 System.out.println();
}

6.一张纸的厚度大约是0.08mm,对折多少次之后能达到珠穆朗玛峰的高度(8848.13米)

public class Test9 {
    
    
 public static void main(String[] args) {
    
    
 long res = 8;
 int count=0;
 // 不知道循环次数,所以可以使用while或者do/while
 while (true) {
    
    
 res *= 2;
 count++;
 if (res > 884813000)
 break;
 }
 System.out.println("共对折了"+count+"次!");
 }
}

改写for循环

public class Test9 {
    
    
 public static void main(String[] args) {
    
    
 long res = 8;
 int count;
 for (count = 1;; count++) {
    
    
 res *= 2;
 if (res > 884813000)
 break;
 }
 System.out.println("共对折了" + count + "次!");
 }
}

7.假如投资的年利率为5%,试求从1000块增长到5000块,需要花费多少年

double i=1000;
		int year;
		for (year=2;;year++) {
    
    
			i=i+0.05*i;
			if (i>5000)
				break;
		}
		System.out.println(year);

8.猜年龄游戏。允许用户最多尝试3次,3次都没猜对的话,就直接退出,如果猜对了,打印恭喜信息并退 出

import java.util.Scanner;
public class Test9 {
    
    
 public static void main(String[] args) {
    
    
        //生成一个20到60之间的年龄值
 Random r = new Random(); // 必须有对应的import java.util.Random导入语int target = r.nextInt(40) + 20;
 System.out.println(target);
 Scanner sc = new Scanner(System.in);
 for (int i = 0; i < 3; i++) {
    
    
 System.out.println("请输入年龄值:");
 int kk = sc.nextInt();
 if (target == kk) {
    
    
 System.out.println("猜对了!");
 break;
 }
 }
 }
}

9.打印出所有的水仙花数

public class Test9 {
    
    
 public static void main(String[] args) {
    
    
 for (int k = 100; k < 1000; k++) {
    
    
 int baiWei = k / 100;// 百位数
 int geWei = k % 10;// 个位数
 int shiWei = (k - baiWei * 100) / 10;// 十位数 k/10%10
 if (k == baiWei * baiWei * baiWei + geWei * geWei * geWei +
shiWei * shiWei * shiWei) {
    
    
 System.out.println(k + "是水仙花数!");
 }
 }
 }
}

10.判断一个数是否质数

public class Test9 {
    
    
public static void main(String[] args) {
    
    
 int k = 6;
 boolean bb = true;
 for (int i = 2; i < k / 2; i++) {
    
    
 if (k % i == 0) {
    
    
 bb = false;
 break;
 }
 }
 if (bb)
 System.out.println(k + "是质数");
 else
 System.out.println(k + "不是质数");
 }
}

11.今有鸡翁一,值钱伍;鸡母一,值钱三;鸡鶵三,值钱一。凡百钱买鸡百只,问鸡翁、母、鶵各几 何?

int k = 0;
		for (int a = 1; a <= 20; a++) {
    
    
			for (int b = 1; b <= 33; b++) {
    
    
				for (int c = 1; c < 100; c++) {
    
    
					if (a * 5 + b * 3 + c == 100 && a + b + 3 * c == 100) {
    
    
						System.out.println("公鸡数量为:" + a + ",母鸡数量为:" + b + ",小鸡数量为:" + c * 3 + "。");
						k++;
					}
				}
			}
		}
		System.out.println(k);

12.有若干只鸡兔同在一个笼子里,从上面数,有35个头,从下面数,有94只脚。问笼中各有多少只鸡和兔

for (int a = 1; a < 35; a++) {
    
     // 定义鸡
			for (int b = 1; b < 35; b++) {
    
    
				if (a + b == 35 && a * 2 + b * 4 == 94) {
    
    
					System.out.println("共有" + a + "只鸡," + b + "只兔子");
				}
			}
		}

13.100 ~ 50000之间有多少整数,其各位数字之和为5,分别是哪些数(例如整数1324的各位数字之和 为 1+3+2+4 等于10(不为5)),并统计满足条件的整数有多少个

int c=0;
		for (int i=100;i<50000;i++) {
    
    
			int wan = i/10000;
			int qian = (i-wan*10000)/1000;
			int bai = (i-wan*10000-qian*1000)/100;
			int shi = (i-wan*10000-qian*1000-bai*100)/10;
			int ge = i%10;
			if (wan+qian+shi+bai+ge==5) {
    
    
				System.out.println(i);
				c++;
			}
		}
		System.out.println("共有"+c+"个这样的数");

猜你喜欢

转载自blog.csdn.net/Lecheng_/article/details/112200423