逻辑题练习-if-for-数组

if-else练习:

1.某月有多少天
1  3   5   7   8   10   12     31
4   6  9   11                  30  
2

2.
输入三个数字并排序


3.
我家的狗5岁了,5岁的狗相当于人类多大呢?其实,狗的前两年每
一年相当于人类的10.5岁,之后每增加一年就增加4岁。那么5岁的狗
相当于人类多少年龄呢?应该是:10.5 + 10.5 + 4 + 4 + 4 = 33岁。
编写一个程序,获取用户输入的狗的年龄,通过程序显示其相当于人
类的年龄。如果用户输入负数,请显示一个提示信息。


4.
大家都知道,男大当婚,女大当嫁。那么女方家长要嫁女儿,当然要提出
一定的条件:高:180cm以上;富:财富1千万以上;帅:是。
如果这三个条件同时满足,则:“我一定要嫁给他!!!”
如果三个条件有为真的情况,则:“嫁吧,比上不足,比下有余。”
如果三个条件都不满足,则:“不嫁!”


5.某公园门票的票价是50元,一次购票满30张,每张可以少收48元。试编写自动计费系统程序。
输入人数计算总价。
public static void main(String[] args) {
        int count=25;//用count表示总人数

    if(count<30){


        }else if(count>=30){


        }else{
        

        }
}

6.
假设你想开发一个玩彩票的游戏,程序随机地产生一个两位数的彩票,提示用户输入
一个两位数,然后按照下面的规则判定用户是否能赢。
1)如果用户输入的数匹配彩票的实际顺序,奖金10 000美元。
2)如果用户输入的所有数字匹配彩票的所有数字,但顺序不一致,奖金 3 000美元。
3)如果用户输入的一个数字仅满足顺序情况下匹配彩票的一个数字,奖金1 000美元。
4)如果用户输入的一个数字仅满足非顺序情况下匹配彩票的一个数字,奖金500美元。
5)如果用户输入的数字没有匹配任何一个数字,则彩票作废。

7.编写一个程序,要求用户输入24小时制的时间,然后显示12小时制的时间。
输入9就是 9am
输入12就是12pm   
输入14就是2pm

23    11pm

8.满500打8折,  700打7折,  900打5折

        double price=689;
        if(){

        }else if(){

        }else if(){

        }else{

        }


9.random生成一个四位随机数,  用户输入自己的会员号,
相等则中奖


9.打印成绩等级


10.画出流程图并编程实现:
某人准备去海南旅游,现在要订购机票。
机票的价格受季节旺季、淡季的影响,头等舱和经济舱价格也不同。
假设机票原价为6500元,
4-10月为旺季,
旺季头等舱打九折,经济舱打八折,淡季头等舱打五折,经济舱打四折。
编写程序,使用嵌套if选择结构,
根据出行的月份和选择的舱位输出实际的机票价格,
如图3.18所示。

使用equals方法判断两个字符串是否相等


11.某公司要给员工发年终奖,为了奖励老员工,工作时间越长,发的越多,规则如下:

//工作满0年,发月薪的1倍月薪年终奖,如果月薪大于8000,那么就是发1.2倍

//工作满1年,发月薪的1.5倍月薪年终奖,如果月薪大于10000,那么就是发1.7倍

//工作满2年甚至更多,发月薪的3倍月薪年终奖,如果月薪大于12000,那么就是发3.2倍

public class F4{}

12.加油案例:
一个加油站为了鼓励车主多加油.加的多有优惠
92号汽油.每升6元;如果大于等于20升,那么每升5.9元
97号汽油.每升7元;如果大于等于30升,那么每升6.95元
编写程序,用户输入自己的汽油编号,然后输入自己加多少升,计算并且输出应付价格

int  oilNum=92;
int  vol=;
if(oilNum=92){
    if(){
    
    }else{
    
    }

}else{
    if(){
    
    }else{
    
    }

}


13.
有一对兔子,从出生后『第3个月起』,『每个月』都『生一对兔子』,『小兔子』长到『第三个月后』每个月有生一对兔子,假如兔子都不死,问『第二十个月』的兔子对数为多少?


13.阶乘的计算方法:
大于等于1
任何大于等于1 的自然数n 阶乘表示方法:
n!= 1 * 2 * 3 * ··· * (n-1) n

n!=n * (n-1)!
0的阶乘
0!=1。

斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13,特别指出:第0项是0,第1项是第一个1。从第三项开始,每一项都等于前两项之和。
 

9.已知小红同学有25元,她攒了几天钱之后发现自己的现在的钱比原来的2倍还多出10块。而小蓝同学有30元,他攒了几天钱之后发现自己的钱正好是原来的2倍。于是小胖说:小红和小蓝现在的钱一样多,请问,他说的对吗?  (这个题用不到if-esle分支, 只会用到+-*/ %等符号)

10.练习1: 判断-个四位数abcd是否等于(ab + cd) * (ab +cd)
举例说明2025=(20+ 25)*(20+ 25)

11.练习2:某小伙想定一份外卖, 商家的优惠方式如下:鱼香肉丝单点24元,油炸花生米单点8元,米饭单点3元。订单满30元8折优惠。鱼香肉丝优惠价16元,但是优惠价和折扣不能同时使用。那么这个小伙要点这三样东西,最少要花多少钱?

12.练习3:接收用户输入的3个整数,并将它们的最大值作为结果输出
 

循环练习:


1.练习题: 鸡兔同笼问题(穷举法)
已知:鸡兔共35只,共94只脚,那么鸡和兔各几只?

2.练习题:求数字阶乘(for循环版)
需求:接收用户输入的数字,计算该数字的阶乘结果
已知:负数不可以有阶乘,0的阶乘结果是1,
5 ! = 5 x 4 x 3 x 2 x 1

3.练习题:打印100以内除了尾数为3,5,7的所有数


4.练习题:求质数:接收用户输入的数字,判断是否为质数
质数的概念:一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数,也称为素数
规定:1既不是质数,也不是合数

5.练习题:生成一个数组,每个空间里存储随机数,将这个数组的元素,
用冒泡排序降序排列,然后打乱顺序后输出。

6.练习题:打印1--1000以内所有的数字(用continue跳过完数)
完数:如果一个数等于其所有因子之和,我们就称这个数为"完数",比如6的因子为1,2,3 6 = 1 + 2 + 3,那么6就是一个完数

7.已知:斐波那契数列的前几个数分别为0,1,1,2,3,5…从第三项开始,每一项都等于前两项的和.请接收用户输入的整数n,求出此数列的前n项.

8.假设一个简单的ATM机的取款过程是这样的:
首先提示用户输入密码(password),最多只能输入三次,
超过3次则提示用户“密码错误,请取卡”结束交易。
如果用户密码正确,再提示用户输入取款金额(amount),
ATM机只能输出100元的纸币,一次取钱数要求最低100元,最高1000元。
若用户输入的金额符合上述要求,则打印输出用户取得钱数,
最后提示用户“交易完成,请取卡”,否则提示用户重新输入金额。
假设用户密码是111111,请编程实现。

9.公园里有一只猴子和一堆桃子,猴子每天吃掉桃子总数的一半,把剩下一半中扔掉一个坏的。到第七天的时候,猴子睁开眼发现只剩下一个桃子。问公园里刚开始有多少个桃子?

 公园里有一只猴子,需要按照以下规则吃桃子, 最终求桃子刚开始有多少个。
规则:猴子每天吃掉当前桃子总数的一半儿,并从剩余的另一半儿中扔掉一个桃子。
     已经第七天只剩一个桃子, 求:最开始有多少个桃子

package day0606;
//公园里有一只猴子,需要按照以下规则吃桃子, 最终求桃子刚开始有多少个。
//规则:猴子每天吃掉当前桃子总数的一半儿,并从剩余的另一半儿中扔掉一个桃子。
//     已经第七天只剩一个桃子, 求:最开始有多少个桃子


//第1天吃桃子之前的桃子数量         190 =(第2天吃桃子之前的桃子数量94+1)*2
//第2天吃桃子之前的桃子数量         94  =(第3天吃桃子之前的桃子数量46+1)*2
//第3天吃桃子之前的桃子数量         46  =(第4天吃桃子之前的桃子数量22+1)*2
//第4天吃桃子之前的桃子数量         22  =(第5天吃桃子之前的桃子数量10+1)*2
//第5天吃桃子之前的桃子数量         10  =(第6天吃桃子之前的桃子数量4+1)*2
//第6天吃桃子之前的桃子数量         4   =(第7天吃桃子之前的桃子数量1+1)*2
//天吃桃子之前的桃子数量         1
public class File2 {

    public static void main(String[] args) {
        //1.用peaches表示本次的桃子的总数(赋值为1表示第7次桃子数量为1)
        int peaches=1;
        //2.循环变量从6开始一直减小到1结束(表示需要计算第6天,第5天,第4天...第1天 每次的桃子数量)
        //i为6表示要计算第6天吃桃子之前,桃子的数量(第七天的桃子数量为peaches变量的初值1,是已经的不需要计算)
        for(int i=6;i>=1;i--){
            peaches=(peaches+1)*2;
        }
        //3.打印peaches中存储的桃子总数
        System.out.println(peaches);

    }


}


10.有一个棋盘,有64个方格,在第一个方格里面放1粒芝麻重量是0.00001kg,第二个里面放2粒,第三个里面放4,求棋盘上放的所有芝麻的重量

https://www.cnblogs.com/0328dongbin/p/8798621.html

for循环练习2:

发黄金问题:

按照页码查询数据案例

数组+循环练习题:
1.定义一个String数组长度用Scanner的nextInt方法输入, 然后用Scanner的next()方法给此数组输入类似"a"  "b" 元素只包含一个小写字母的数据(还可以输入?)。
 只能输入小写字母和问号,如果不符合输入要求就提示"输入数据不符合要求,请重新输入",并用用Scanner的next()方法让用户重新输入。

2.输入完成后将数组中的所有?替换成小写字母,要求不能和原有数组中的元素重复

提示:字符串比较是否相等用String文件(类)类的equals方法,举例
     String s1="hello";    String s2="hello2";     System.out.println(s1.equals(s2));


import java.util.Arrays;
import java.util.Scanner;

public class StringArr {
    public static void main(String[] args) {
        //定义一个数组长度用nextInt方法输入
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入数组长度:");
        int length = sc.nextInt();
        String[] arr = new String[length];

        //用next()给数组赋值
        for (int i = 0; i < arr.length; i++) {
            System.out.println("请输入第" + (i + 1) + "个数据");
            String input = sc.next();

            //只能输入小写字母和问号
            while (!input.matches("[a-z?]")) {
                System.out.println("输入数据不符合要求,请重新输入");
                input = sc.next();
            }
            arr[i] = input;
        }

        System.out.println(Arrays.toString(arr));

        //定义一个方法,找出从a~z中第一个和原有数组中都不相同的字母
        String target = findDifferentWord(arr);

        //将数组中的所有?替换成小写字母
        for (int i = 0; i < arr.length; i++) {
            if (arr[i].matches("[?]")) {
                arr[i] = target;
            }
        }
        System.out.println(Arrays.toString(arr));
    }



    //找出从a~z中第一个和原有数组中都不相同的字母
    public static String findDifferentWord(String[] arr) {
        //定义一个字符串,从a-z
        String words = "abcdefghijklmnopqrstuvwxyz";

        for (int i = 0; i < words.length(); i++) {
            String target = String.valueOf(words.charAt(i));
            for (int j = 0; j < arr.length; j++) {
                if (target.equals(arr[j])) {
                    break;
                }
                if (j == arr.length - 1) {
                    return target;
                }
            }
        }
        //如果字符串数组的元素已经包含了从a~z的所有小写字母,则返回"!"
        return "!";
    }
}


10. 验证角谷猜想:任给一个自然数,若为偶数除以2,若为奇数则乘3加1,
得到一个新的自然数后按照上面的法则继续计算,若干次后得到的结果必然为1。
要求:读入一个自然数,输出计算的步骤。
 

package chap4;

import java.util.Scanner;

/*
* 给一个自然数,偶数除以2,奇数则乘以3加1,得到一个新的自然数继续上面步骤计算
* */
public class Work10 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个数");
        int sum= scanner.nextInt();
        while(sum!=1){
            if (sum % 2 == 0) {
                System.out.print(sum);
                sum/=2;
                System.out.println("/"+2+"="+sum);
            }else if (sum%2 !=0){
                System.out.print(sum);
                sum=sum*3+1;
                System.out.println("*"+3+"+"+1+"="+sum);
            }
        }
    }
}

package day0613;

public class Test3 {
    public static void main(String[] args) {
        int[]  old={1,9,4,2,6,2,6,2,8,2,6};
        //用外循环从第1个位置开始获取元素(和此元素前边的每个元素进行比较<如果相等就跳过此元素>)
        T: for(int i=1;i<old.length; i++) {
            int t = old[i];//old[i]表示当前需要判断的元素(判断它要不要打印,它和前边都不相等就打印)
            String eq="no";//eq变量用于标识当前元素和前边每个元素是否相等(如果都不相等它的值就是no)
            //内循环从0开始到i-1结束  (j=0; j<i; j++) ,用来拿当前元素和前边每个元素判断是否相等
            //如果相等就将eq的值改为yes(则当前元素old[i]不能被打印<可以用continue跳过外循环>)
            for(int j=0; j<i; j++){
                if(old[i] == old[j]){
                    eq="yes";
                    continue T;
                }
            }
            if("no".equals(eq)){
                System.out.println(old[i]);
            }
        }

    }
}





package day0613;

public class Test4 {
    public static void main(String[] args) {
        int[] a={20, 45, 78, 34, 16, 3, 99, 56};
        //用for循环统计数组z中大于50的数有多少个
        int c=0;
        for (int i=0; i<a.length; i++){

            if(a[i]>50){
                c++;
            }

        }
        System.out.println("c = " + c);


    }
}

将一个任意位数的整数的每一位放入到一个数组中:

        int n=9586321;
        int[] a = new int[1];
        for(int i=0;;i++){
            a[i] = n%10;   //除以10取余数就是求个位
            n=n/10;        //将当前数字变小
            if(n<=0){
                break;
            }else{
                a=Arrays.copyOf(a,a.length+1);
            }
        }
        System.out.println(Arrays.toString(a));

三天打鱼两天晒网案例:

 * 2000 1 1 表示开始打鱼 三天打鱼两天晒网
 * 求输入一个年份 表示年月日是打鱼还是晒网

package qq;

import javax.swing.JOptionPane;
import java.util.Scanner;

/*
 * 2000 1 1 表示开始打鱼 三天打鱼两天晒网
 * 求输入一个年份 表示年月日
 * 是打鱼还是晒网
 * */

public class ThreeDaysFishing {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入年份");
        int year = scanner.nextInt();
        System.out.println("请输入月份");
        int month = scanner.nextInt();
        System.out.println("请输入日");
        int day = scanner.nextInt();

        //定义总天数并计算
        int totalDays;
        totalDays = calculateTotalDays(year, month, day);

        //判断这天是在打鱼还是晒网
        String fishingOrNet = isFishing(totalDays);

        //打印结果
        System.out.println(year + "年" + month + "月" + day + "日" + fishingOrNet);
    }

    
    
    //计算总天数
    private static int calculateTotalDays(int year, int month, int day) {
        int totalDays = 0;

        //计算年代表的天数
        for (int i = 2000; i < year; i++) {
            //如果是闰年,加366
            if ((i % 4 == 0 && i % 100 != 0 || i % 400 == 0)) {
                totalDays += 366;
            } else {//平年加365
                totalDays += 365;
            }
        }

        //计算月代表的天数
        for (int i = 1; i < month; i++) {
            switch (i) {
                case 4:
                case 6:
                case 9:
                case 11:
                    totalDays += 30;
                    break;
                //2月单独判断
                case 2:
                    if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
                        totalDays += 29;
                    } else {
                        totalDays += 28;
                    }
                    break;
                default:
                    totalDays += 31;
            }
        }

        //计算日代表的天数
        totalDays += day;
        return totalDays;
    }
    
    

    //根据总天数判断这一天在打鱼还是晒网
    private static String isFishing(int totalDays) {System.out.println(totalDays);
        if (totalDays % 5 == 0 || totalDays % 5 == 4) {System.out.println(totalDays % 5 == 0);
            return "这天在晒网";
        }
        return "这天在打鱼";
    }
}

水仙花数:

import java.util.Scanner;//2.

public class Flower {
    public static void main(String[] args) {

        //判断一个数是否是水仙花数
        int x=534;
        int h=x/100;
        int t=x%100/10;
        int o=x%10;
        System.out.println(h);
        System.out.println(t);
        System.out.println(o);

        //判断100-999之间所有的水仙花数
        for(int i=100;i<=999;i++){
            int hundreds=i/100;
            int ten=i%100/10;
            int one=i%10;
            System.out.println(i+": "+hundreds+"-"+ten+"-"+one);
        }

    }
}








 

打印图形:

public class M {
    public static void main(String[] args) {

        for (int j = 1; j <= 5; j++) {//层数
            for (int k = 1; k <= 5-j; k++) {
                System.out.print(" ");
            }

            for (int i = 1; i <= 2*j-1; i++) {//行
                if(i == 1 || i == (2*j-1) || j==5) {
                    System.out.print("*");
                }else{
                    System.out.print(" ");
                }
            }

            System.out.println();
        }

    }
}

//      *
//     * *
//    *   *
//   *     *
//  *********

package day0606;

import java.util.Scanner;

//假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。
//给你一个整数数组flowerbed 表示花坛,由若干 0 和 1 组成,其中 0 表示没种植花,1 表示种植了花。
// 另有一个数n ,能否在不打破种植规则的情况下种入 n 朵花?能则返回 true ,不能则返回 false 。
//
//来源:力扣(https://leetcode.cn/)
public class File6 {
    public static void main(String[] args) {

        int[] flowers={0,1,0,1,0,0,0,1,0,1,0};
        //2.用for循环判断每个位置能否放入1(存元素的前提:两个1不能相邻)
        int count=0;
        for(int i=0; i<=10; i++){
            //如果满足存储元素的前提(两个1没相邻),就给flowers数组的第i位存入一个1
            //第一位和最后一位可以放入1的情况为:   int[] flowers={0,0,0,1,0,0,0,1,0,0,0};
            if( (i==0&&flowers[0]==0&&flowers[1]==0)||
                (i==flowers.length-1 && flowers[flowers.length-1]==0 && flowers[flowers.length-2]==0)||
                (i!=0&& i!=flowers.length-1&&flowers[i-1]==0&&flowers[i+1]==0&& flowers[i]==0 ) ){
                flowers[i]=1;
                count++;
            }
        }

        Scanner s=new Scanner(System.in);
        int n=s.nextInt();
        if(count>=n){
            System.out.println("可以种下" +n +"朵花");
        }else{
            System.out.println("种不下" +n +"朵花");
        }


    }



}

package day0606;
//目前有一个小球处于100米的高度, 每次下落会反弹为原来高度的一半儿,
//第10次落地时,其运动轨迹的长度为多少米? 第10次反弹后的高度是多少?
public class File8 {
    public static void main(String[] args) {

        //1.定义一个变量height表示小球的初始高度
        double height=100.0;

        //2.计算10次下落后小球所处的高度
        //方式一: 经过第10次下落后的反弹高度为下列公式的计算结果(这是一种计算方式)
        System.out.println(height/Math.pow(2,10));
        //方式二: 经过第10次下落后的反弹高度为下列公式的计算结果(这是另一种计算方式)
        for(int i=1; i<=10; i++){
            height=height/2;
        }
        System.out.println(height);


        /*
        distance=distance+height/2*2;
        System.out.println("运动总轨迹长度为:"+distance);*/


        //3.计算小球10次下落后所有的运动轨迹的长度
        height=100/2;
        //distance变量用来存储总共的运动轨迹长度(初值为150表示第一次下落后的轨迹长度为150)
        double distance=0;
        //第二次到第十次的运动轨迹的计算(用以前的运动轨迹长度和本次的 高度*2相累加)
        for(int i=2 ; i<=10; i++){
            distance=height*2+distance;
            height=height/2;
        }
        //之前所有的运动轨迹长度加上第一次下落时的运动轨迹长度(100)
        distance=distance+100;
        System.out.println(distance);

    }
}

数组{1,9,4,2,6,2,6,2,8,2,6}元素去重:

package day0613;

public class Test3 {
    public static void main(String[] args) {
        int[]  old={1,9,4,2,6,2,6,2,8,2,6};
        //用外循环从第1个位置开始获取元素(和此元素前边的每个元素进行比较<如果相等就跳过此元素>)
        T: for(int i=1;i<old.length; i++) {
            int t = old[i];//old[i]表示当前需要判断的元素(判断它要不要打印,它和前边都不相等就打印)
            String eq="no";//eq变量用于标识当前元素和前边每个元素是否相等(如果都不相等它的值就是no)
            //内循环从0开始到i-1结束  (j=0; j<i; j++) ,用来拿当前元素和前边每个元素判断是否相等
            //如果相等就将eq的值改为yes(则当前元素old[i]不能被打印<可以用continue跳过外循环>)
            for(int j=0; j<i; j++){
                if(old[i] == old[j]){
                    eq="yes";
                    continue T;
                }
            }
            if("no".equals(eq)){
                System.out.println(old[i]);
            }
        }

    }
}

package day0613;

public class Test4 {
    public static void main(String[] args) {
        int[] a={20, 45, 78, 34, 16, 3, 99, 56};
        //用for循环统计数组z中大于50的数有多少个
        int c=0;
        for (int i=0; i<a.length; i++){

            if(a[i]>50){
                c++;
            }

        }
        System.out.println("c = " + c);


    }
}

杨辉三角ublic class yanghui_hui_trigle {
    public static void main(String[] args) {


        /*for (int i = 1; i <=7; i++) {
            for (int j = 1; j <=i; j++) {
                System.out.print(jie(i-1)/(jie(j-1)*jie(i-j))+"\t");
            }
            System.out.println();
        }*/


//        for(int f=0;f<=3;f++){
//            for (int d = 0; d<3-f; d++) {
//                System.out.print(" ");
//            }
//            for (int d = 0; d <f; d++) {
//                System.out.print("*"+" ");
//            }
//            System.out.println();
//
//        }


        for (int i = 1; i <=7; i++) {
            for (int d=1; d<8-i; d+=1) {
                System.out.print(" ");
                System.out.print(" ");
            }
            for (int j = 1; j <=i; j++) {
                System.out.print(jie(i-1)/(jie(j-1)*jie(i-j))+"   ");
            }
            System.out.println();
        }
    }
    public static  int jie(int m){
        int a=1;
        for (int i = 1; i <=m; i++) {
            a*=i;

        }
        return a;
    }
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值