【无标题】

目录

题目2、立方变自身

三 羊 生 瑞 气

循环节问题

题目7、牌型整数

题8、饮料换购目饮料换购


 

题目2、立方变自身


题目描述
观察下面的现象,某个数字的立方,按位累加仍然等于自身。
1^3 = 1
8^3 = 512 5+1+2=8
17^3 = 4913 4+9+1+3=17

请你计算包括1,8,17在内,符合这个性质的正整数一共有多少个?

请填写该数字,不要填写任何多余的内容或说明性的文字。

package 往年例题.省赛模拟题.模拟题2;

/**
 * @author diao 2022/3/24
 */
public class 立方数 {
    static int count=0;
    public static void main(String[] args) {
       for(long i=1;i<=10000;i++){
           //因为有大数模拟,所以我们这里用long模拟
           long temp=i*i*i;
           //进行按位取数,弄一个变量储存所有不同位上的数之和
           long temp1=0;

           while(temp>0){
               temp1+=temp%10;
               temp/=10;
           }
           if(i==temp1){
               System.out.println("i="+i+",立方和为:"+(i*i*i));
               count++;
           }
       }
        System.out.println(count);
    }
}

三 羊 生 瑞 气

(如果有对齐问题,可以参看【图1.jpg】)

其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。

请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。
在这里插入图片描述

package 往年例题.省赛模拟题.模拟题2;

/**
 * @author diao 2022/3/24
 */
public class 三羊献瑞 {
    /**
     * 根据条件得到一些特定值,然后利用循环不断缩小范围
     * @param args
     */
    public static void main(String[] args) {
        //e:1 a:9 f:0 c=b+1 c+g>10,数之间各不相同
        for(int b=2;b<9;b++){
            for(int d=2;d<9;d++){
                //进行条件判断,如果两数出现相同就跳至下一个循环
                if(b==d) continue;
                for(int g=2;g<9;g++){
                    if(g==b||g==d) continue;
                    int c=b+1;
                    if(c==b||c==d||c==g) continue;
                    if(c+g<=10) continue;
                    //因为aef已经确定值了就不需要在循环了
                    /**
                     * 根据两个数的加法得到值建立等式
                     */
                    int start_end=9000+b*100+(b+1)*10+d+1000+g*10+b;
                    //因为出现了i也就是一个新的文字,用i表示,再for一次
                    for(int i=2;i<9;i++){
                        if(i==b||i==d||i==g||i==c) continue;
                        if(start_end<=(10000+c*100+b*10+i)&&start_end>=(10000+c*100+b*10+i)){
                            System.out.printf("%d%d%d%d",9,b,c,d);
                            System.out.println();
                            System.out.printf("%d%d%d%d",1,0,g,b);
                            System.out.println();
                            System.out.printf("%d",start_end);
                        }

                    }
                }
            }
        }
    }
}

循环节问题

package 往年例题.省赛模拟题.模拟题2;

import java.util.ArrayList;

/**
 * @author diao 2022/3/24
 */
public class 循环节问题 {
    public static void main(String[] args) {
        int remainder = getRemainder(11, 13);
        System.out.println(remainder);
    }

    /**
     * 取循环小数的重复数
     * @param n:除数
     * @param m:被除数
     * @return
     */
    public static int getRemainder(int n,int m){
        n%=m;
        ArrayList list = new ArrayList();

        for(;;){
            list.add(n);
            n*=10;
            n%=m;
            if(n==0) return 0;
            //indexOf(n)就是n这个数的索引,一般用于去重,最后一次出现得到话是lastIndex
            if(list.indexOf(n)>=0) return list.size();
        }
    }

    public static int f(int n,int m){
        //第一个小数
        n%=m;
        //1.创建一个集合,放入每个小数
        ArrayList list = new ArrayList();

        for(;;){
            //2.添加完这一个小数之后
            list.add(n);

            //3.n*10,继续%m得到下一个小数
            n*=10;
            n%=m;

            //4.结束条件
            if(list.size()<=0) return 0;

            //这里注意:indexOf()就是第一次出现的索引位置,如果说出现的位置不是1le,就返回集合大小
            if(list.indexOf(n)>0) return list.size();
        }

    }

}

题目7、牌型整数


题目描述
小明被劫持到X赌城,被迫与其他3人玩牌。
一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。
这时,小明脑子里突然冒出一个问题:
如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序,自己手里能拿到的初始牌型组合一共有多少种呢?

请填写该整数,不要填写任何多余的内容或说明文字。

package 往年例题.省赛模拟题.模拟题2;

/**
 * @author diao 2022/3/24
 */
public class 递归实现发牌问题 {
    static int sum=0;
    static int count=0;
    public static void main(String[] args) {
        f(0);
        System.out.println(count);
        f1(0);
        System.out.println(0);
    }

    /**
     * sum:取牌数量,n代表取牌的数字是?(0-12)
     * @param n
     */
    public static void f(int n){
        //1.结束条件
        if(sum>13||n>13) return;
        if(sum==13){
            //取牌数满了,种类+1
            count++;
            return;
        }

        /**理解:和全排列类似
         * 首先取第一种牌取一张,然后递归到第二种
         * 第二种再来一张...直到所有种类都来了一张,也就是牌满了13张f(13),结束
         * 开始回溯
         * f(12)....直到f(0)
         */
        //2.递归思维
        for(int i=0;i<=4;i++){
            //0-4代表有五种取法,因为每种牌都有五种取法(0-4张)
            sum+=i;
            f(n+1);
            //3.回溯,因为我可以不取那一张,我可以一下取两张
            sum-=i;
        }
    }


    public static void f1(int n) {   // sum是取牌的数量,n是取得牌的数字是几。这里n的范围是0到12.

        if(sum>13 || n>13) return ;  //sum>13表示牌取多了。n>13表示一共13种牌,不可能取到第14种。
        if(sum==13 ) {       //只有当取牌的数量达到13张的时候,表示这次可行。
            count++;
            return;
        }

        for(int i=0; i<=4; i++) {    //从0到4,一共5种取法,因为有的牌可以一张不取。
            sum += i;
            f(n+1);
            sum -= i;                //回溯回去,比如上次取了一张,先减去那一张,这次可以取两张。
        }
    }
}

题8、饮料换购目
饮料换购

乐羊羊饮料厂正在举办一次促销优惠活动。乐羊羊C型饮料,凭3个瓶盖可以再换一瓶C型饮料,并且可以一直循环下去,但不允许赊账。

请你计算一下,如果小明不浪费瓶盖,尽量地参加活动,那么,对于他初始买入的n瓶饮料,最后他一共能得到多少瓶饮料。

输入:一个整数n,表示开始购买的饮料数量(0<n<10000)
输出:一个整数,表示实际得到的饮料数

package 往年例题.省赛模拟题.模拟题2;

/**
 * @author diao 2022/3/24
 */
/**三个瓶盖换一瓶饮料,问一下买n瓶饮料可以得到多少瓶饮料
 *
 */
public class 饮料换购 {
    public static void main(String[] args) {
        int cal = cal(3);
        System.out.println(cal);
    }

    public static int cal(int n){
       //1.首先特殊情况
       if(n==0||n==1||n==2){
           return n;
       }
       //2.当大于2时
        int temp=n;
        while(n>2){
            //temp=饮料+瓶盖兑换的饮料
            temp+=n/3;
            //更新瓶盖数,兑换的饮料的瓶盖数
            n=n/3+n%3;
        }
        return temp;
    }

    public static int cal1(int n){
        while(n>2){
            n-=3;
            n++;
        }
        return n;
    }
    
    
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fairy要carry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值