java练习题—多重循环
难题回顾
3、题目:将一个正整数分解质因数。例如:输入90,打印出90=233*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n不等于k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
public class test3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个正整数:");
int num = sc.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--;
}
}
}
}
}
5、题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数
public class test5 {
public static void main(String[] args) {
int sum=0;//每次循环初始化一次和
for (int i = 2; i <=1000 ; i++) {
//求某个数的所有因数
for (int j = 1; j <i ; j++) {
if (i%j==0){
sum+=j;
}
}
if (i==sum){
System.out.println("完数:"+i);
}
sum=0;
}
}
}
7、题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。
public class test7 {
public static void main(String[] args) {
for (int i = 1; i < 4; i++) {//百位数字
for (int j = 1; j <= 4 ; j++) {//十位数字
if (i==j)continue;
for (int k = 1; k <=4 ; k++) {//个位
if (k==i || k==j)
continue;
System.out.println(i+""+j+k);
k++;
}
}
}
}
}
9、题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
程序分析:在10万以内判断,另外由这个数的开方数自乘得到平方数,进行比较
public class test9 {
public static void main(String[] args) {
for (int i = 0; i < 100000; i++) {
//1.这个数加上100以后是完全平方数
//2.这个数加上168以后是完全平方数
int num1=i+100;
int num2=i+268;
boolean flag=false;
int num=0;
int tmp=0;
for (int j = 0; j < 400; j++) {
if (num1==j*j){
tmp=j;
num=num1;
flag=true;
}
if (flag){
if (num2==j*j){
System.out.println(i);
System.out.println(i+"+100="+tmp*tmp);
System.out.println(i+"+268="+num2);
}
}
}
}
}
}
11、有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。
程序分析:请抓住分子与分母的变化规律。
public class test11 {
public static void main(String[] args) {
double a=1;
double b=2;
double sum=b/a;
for (int i = 2; i <=20;i++) {
b=a+b;
a=b-a;
sum+=b/a;
}
System.out.println(sum);
}
}
15、题目:打印出杨辉三角形(要求打印出10行如下图)
程序分析:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
public class test15 {
public static void main(String[] args) {
int num=5;
for (int i = 0; i < num; i++) {
int v=1;
int a=i;
for (int j = 0; j <= i; j++) {
if (j==0) System.out.print(1+" ");
else{
v=v/j;
System.out.print(v+" ");
}
v*=a;
a--;
}
System.out.println();
}
}
}
16、题目:求0—7所能组成的奇数个数。
public class test16 {
public static void main(String[] args) {
int total=0;
for (int i = 2; i <= 8; i++) {//外层循环定义位数
int sum=4;
for (int j = 1; j < i; j++) {
if (j==1){
sum+=sum*6;
}else{
sum+=sum*(8-j);
}
}
}
System.out.println(total);
}
}