今天针对一些练习题,使用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+"个这样的数");