对多位数的深度运算
当我们需要对多位数进行一定深度的运算的时候,循环是必不可少的。我们可以通过循环对多位数各个数位进行分离,分离之后可以随意操作(包括重新赋值、比较等)
水仙花数
public class HW2 {
public static void main(String[] args) {
System.out.println("100到999之间的水仙花数是:");
for (int i = 100; i < 1000; i++) {
int gei=0, shi=0, bai=0, sum=0;
gei = i % 10;
shi = i / 10 % 10;
bai = i / 100;
sum = gei*gei*gei + shi*shi*shi+ bai*bai*bai;
if (sum==i){
System.out.print(i+"\t");
}
}
}
}
组成不相同的数
这是上一种情况的反向思维。用一个个数字组成一个多位数,也需要用到循环。循环和条件选择结构的结合使用,为这种需要遍历大量数据而从其中提取出合适的情况,提供了基础的逻辑结构。
有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
public class HW7 {
public static void main(String[] args) {
int num = 0;
for (int i = 1; i <= 4; i++) {
for (int j = 1; j <= 4; j++) {
for (int k = 1; k <= 4; k++) {
if (i != j && i != k && k != j){
num++;
System.out.print(i*100+j*10+k+"\t");
}
}
}
System.out.println();
}
}
}
一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
public class HW9 {
public static void main(String[] args) {
int num1=0,num2=0,num3=0;
int root2, root3;
while (num1 <= 100000){
num1++;
num2 = num1 + 100;
num3 = num1 + 268;
root2 = (int)Math.sqrt(num2);
root3 = (int)Math.sqrt(num3);
if (root2*root2 == num2 && root3*root3 == num3){
System.out.println(num1);
}
}
}
}
使用循环来达成某种对数的条件
多重循环,现阶段这里通常是指二重循环,由两个循环变量I和J组成了变化的主体部分。这里对I和J的理解可以有两种,这里将讲述第一种:用J循环来找出符合条件的I的值,求素数就是最典型的一种。
素数
判断2-100之间有多少个素数,并输出所有素数。
public class HW1 {
public static void main(String[] args) {
System.out.println("2到100之间的素数:");
for (int i = 2; i <= 100 ; i++) {
boolean k = true;
for (int j = 2; j < i; j++) {
if (i%j==0){
k = false;
break;
}
}
if (k==true){
System.out.print(i+"\t");
}
}
}
}
分解质因数
将一个正整数分解质因数。
import java.util.Scanner;
public class Test3 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入一个正整数");
int num = input.nextInt();
System.out.print(num+"=1");
for (int i = 2; i <= num; i++) {
if(i==num){
System.out.print("*"+num);
break;
}else if(num%i==0){
num/=i;
System.out.print("*"+i);
i--;
}
}
}
}
图形相关
这里是对双重循环的第二种理解:即为横坐标和纵坐标。比较常见的题型有打印图形,或者将数据以某种特定的形状打印出来。
梯形
public class HW20 {
public static void main(String[] args) {
for (int i = 5; i <= 10; i++) {
for (int j = 1; j <= (10-i); j++) {
System.out.print(" ");
}
for (int j = 1; j <= 2*i-1; j++) {
System.out.print("*");
}
System.out.println();
}
}
}
杨辉三角形
public class HW15 {
public static void main(String[] args) {
int[][] a=new int[10][10];
for (int i = 0; i < 10; i++) {
for (int j = 0; j <= i; j++) {
if (j==0 || j==i){
a[i][j] = 1;
}else{
a[i][j] = a[i-1][j-1]+a[i-1][j];
}
}
}
for (int i = 0; i < 10; i++) {
for (int j = 0; j < (10-i); j++) {
System.out.print(" ");
}
for (int j = 0; j < 10; j++) {
if (a[i][j] != 0){
System.out.print(a[i][j]+" ");
}
}
System.out.println();
}
}
}