Java练习题--循环结构

循环结构练习

1、求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如5+55+555+5555+55555(此时共有5个数相加)。
分析:输入a时,得到的算式是a+aa+…+aa…a 最后一项为a个a。观察此式k可以看出后一项为(前一项*10+a),故利用循环可分别算出每一项值,然后求和即可得到结果,此外为了得到该形式,可再利用循环单独输出每项值。

Scanner sc = new Scanner(System.in);
System.out.println("请输入一个数:");
int num = sc.nextInt();
// 用来存储每一项的值
int temp = num;
// 从第二项开始计算,故sum的值为第一项的值,即num
int sum = num;
for (int i = 1; i < num ; i++) {
    temp = temp * 10 + num;
    sum = sum + temp;
}
System.out.print(sum+"="+num);
// 输出 a+aa+a...a的格式
temp = num;
for (int i = 1; i < num ; i++) {
    temp = temp * 10 + num ;
    System.out.print("+"+temp);
}

2、一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?(在10万以内寻找该数)
分析:通过遍历对(i+100)和(i+268)开方,若开发得到的整数的平方分别等于(i+100)和(i+268),则说明此数符合题意

for(int i = 1;i<=100000;i++){
// 将i+100开方并强转成int,若i+100开方出来位小数,则int会省略小数
    int num =(int)Math.sqrt(i+100);
    if(num * num ==(i+100)){
        int num2 =(int)Math.sqrt(i+100+168);
        if(num2 * num2 ==(i+100+168)){
            System.out.print(i+" ");
        }
    }
}

3、有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。

int sum = 0;
int count = 0;
System.out.println("1-4组成无重复三位数:");
// 百位
for (int x = 1; x <= 4; x++) {
	// 十位
    for (int y = 1; y <= 4; y++) {
    	//个位
        for (int z = 1; z <= 4; z++) {
        	// 判断百位、十位、个位是否相等
            if (x != y && x != z && y != z) {
                sum = x * 100 + y * 10 + z;
                count++;
                System.out.print(sum + " ");
            }
        }
    }
}
System.out.println();
System.out.println("共组成" + count + "个");

4、一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高?
分析:每次掉落后的高度为原来的一半,在记录总路程时同一高度有一升、一降的过程,且第十次落地没有弹起,故无需记录。

double height = 100;
double sum = height;
for(int i = 1; i<=10;i++){
    height/=2;
    System.out.println("第"+i+"次后高度为:"+height);
    if(i==10){
        break;
    }
    sum+=height*2;
}
System.out.println("总高度为:"+sum);

5、有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。
分析:注意观察分子分母的规律,分子为前一项分子分母之和,分母为前一项的分子。

// 分母
double x = 2;
// 分子
double y = 1;
double sum = 0;
for(int i = 1;i<=20;i++){
    sum = sum + x/y;
    x= x+y;
    y= x-y;
}
System.out.println(sum);

6、一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
分析:题目规定五位数,故可以获取个位、十位、千位、万位,比较个位是否等于万位,十位是否等于千位。

Scanner sc = new Scanner(System.in);
System.out.println("请输入一个5位的整数:");
int num = sc.nextInt();
while(num<10000||num>99999){
    System.out.println("输入有误!请输入一个5位的整数:");
    num = sc.nextInt();
}
if(num%10!=num/10000||num/10%10!=num/1000%10){
    System.out.println(num+"不是回文数");
}else{
    System.out.println(num+"是回文数");
}

7、求0—7所能组成的奇数个数
分析:题目要求为奇数,故个位只能为1、3、5、7,首位不能为0,通过排列组合可得到答案

int sum = 4;
int count = sum;
System.out.println("0-7可以组成1位奇数"+sum+"个");
sum = sum*6;
count+=sum;
System.out.println("0-7可以组成2位奇数"+sum+"个");
int a = 6;
for(int i=3;i<=8;i++){
    sum = a*sum;
    a--;
    System.out.println("0-7可以组成"+i+"位奇数"+sum+"个");
    count+=sum;
}
System.out.println("0-7共能组成奇数"+count+"个");

你可能感兴趣的:(JAVA,java)