我的算法设计实验代码

第一题

题目简介

由1,3,4,5,7,8六个数字组成的六位数中,能被11整除的最大的数是多少,每个数字至多用一次。

解题思路

暴力枚举,没想到什么好办法,就是穷举所有数字,然后判断能不能被11整除,使用一个变量初始化为-1,用来存放满足条件得最大值,根据后面查找得结果来替换存放最大值得变量得值。但是上述这个暴力破解时空开销都非常大。

改进

整除11的数有个特殊性质,比如121,1-2+1=0,0刚好是11的倍数,也就是这个数满足每一位数交替求和是11的倍数的话,那么这个数就一定能被11整除,根据这个特性可以稍微修改以下代码判断满足条件最大的时间开销。

package com.sixWeek;

import java.util.Scanner;

/**
 * @author WangYH
 * @version 2021.1.3
 * @date 2023/4/1 20:08
 */

public class Algo_1 {
    public static void main(String[] args) {
        /**
         * 由1,3,4,5,7,8这6个数字组成六位数中,能被11整除的最大的数是多少。
         */
        int[] arr  = new int[6];
        System.out.println("请输入6个数");
        for (int i = 0;i < 6;i++){
            arr[i] = new Scanner(System.in).nextInt();
        }
        int MaxNum = -1;

        for (int a : arr){
            for (int b : arr){
                if (b != a){
                    for (int c : arr){
                        if (c != a && c != b){
                            for (int d : arr){
                                if (d != a && d != b && d != c){
                                    for (int e : arr){
                                        if (e != a && e != b && e != c && e != d){
                                            for (int f : arr){
                                                if (f != a && f != b && f != c && f != d && f != e){
                                                    int sum = a - b + c - d + e - f;
                                                    if (sum % 11 == 0){
                                                        int num = a * 100000 + b * 10000 + c * 1000 + d * 100 + e * 10 + f;
                                                        if (num > MaxNum){
                                                            MaxNum = num;
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        System.out.println("The largest number composed of 1,3,4,5,7,8 that is divisible by 11 is: " + MaxNum);
    }
}

这题还有一个递归版本的,感兴趣可以看下

算法实验第一题–递归版本





第二题

题目描述

请用1,2,5,7,8,9,每个数字至多用一次,组成一个五位数,满足能被75整除的数有多少个。

解题思路

75=3*25,这个数满足被3和25整除,若要被3整除,则满足每个位上的数字之和是3的倍数,从这里优化可以减少计算时间开销。相比组合成本来的数然后整除75还是要快一点的。

package com.sixWeek;

import java.util.Scanner;

/**
 * @author WangYH
 * @version 2021.1.3
 * @date 2023/4/1 15:38
 */

public class Algo_2 {
    public static void main(String[] args) {
        /**
         * 这是算法实验第二题
         * 求1,2,5,7,8,9组成能被75整除的数一共有多少
         */
        int[] digits = new int[6];
        System.out.println("请依次输入六个数");
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < 6; i++) {
            digits[i] = sc.nextInt();
        }
        int count = 0;

        for (int a : digits) {
            for (int b : digits) {
                if (b != a) {
                    for (int c : digits) {
                        if (c != a && c != b) {
                            for (int d : digits) {
                                if (d != a && d != b && d != c) {
                                    for (int e : digits) {
                                        if (e != a && e != b && e != c && e != d) {
                                            if (d == 0 && e == 0 || d == 2 && e == 5 || d == 5 && e == 0 || d == 7 && e == 5){
                                                int num = a + b + c + d + e;
                                                if (num % 3 == 0){
                                                    count++;
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }

        System.out.println("一共有" + count + "个这样的数。");
    }
}





第三题

题目介绍

一个小于200的自然数,被7整除剩余2,被8整除剩余3,被9整除剩余1,这个数是多少。

解题思路

发现7-2=8-3=5,这个数加上5可以同时被7和8整除,根据这个可以简单优化暴力法。

package com.sixWeek;

/**
 * @author WangYH
 * @version 2021.1.3
 * @date 2023/4/1 16:06
 */

public class Algo_3 {
    public static void main(String[] args) {
        /**
         * 这是算法实验第三题
         * 一个小于200的自然数,被7除余2,被8除余3,被9除余1
         * 这个数是多少
         */
        int sum = 20;
        for (int i = sum;i <= 200;i++){
            if((i + 5) % 56 == 0){
                if (i % 9 == 1){
                    System.out.println(i + "就是我们要找的数");
                }
            }
        }
    }
}





第四题

题目介绍

在所有的两位数中,十位上的数比个位上的数字要大的共有多少个?三位数中百位比个位大的数有多少个。

解题思路

我的想法就是用两个变量分别代替十位和个位,进行比较,设置计数器。三位数的类似。做完三位数的发现似乎有规律,两位的是45个,三位的是450个,四位数的是4500个,每次都是扩大十倍。

package com.sixWeek;

import java.util.FormatFlagsConversionMismatchException;

/**
 * @author WangYH
 * @version 2021.1.3
 * @date 2023/4/1 16:20
 */

public class Algo_4 {
    public static void main(String[] args) {
        /**
         * 找到两位数十位比个位的数的个数
         * 找到三位百位比个位大的数的个数
         */
       int count1 = 0;
       for (int i = 1; i <= 9; i++){
           for (int j = 0;j <= 9;j++){
               if(i > j){
                   count1++;
               }
               else {
                   break;
               }
           }
       }
        System.out.println("两位数一共有:" + count1 + "个满足要求");

       int count2 = 0;
       for (int i = 1; i <= 9; i++) {
           for (int j = 0; j <= 9; j++) {
               int k;
               for (k = 0; k <= 9; k++) {
                   if (i > k){
                       count2++;
                   }
                   else {
                       break;
                   }
               }
               if (i < k){
                   break;
               }
           }
       }
        System.out.println("三位数一共有:" + count2 + "个满足要求");


        int count3 = 0;
        int j,k,l = 0;
        for (int i = 1; i <= 9; i++) {
            for ( j = 0;j <= 9; j++) {
                for ( k = 0;k <= 9;k++){
                    for ( l = 0;l <= 9; l++){
                        if (i > l){
                            count3++;
                        }
                        else {
                            break;
                        }
                    }
                    if (i < l){
                        break;
                    }
                }
                if (i < l){
                    break;
                }
            }
        }
        System.out.println(count3);
    }
}





第五题

题目介绍

求 s=a+aa+aaa+aaaa+…,a是一个数,一共几个数相加由键盘控制,请输入输入两个数,第一个是相加数字,第二个是相加数字个数。

解题思路

刚开始想的是,a到aa的变换可以使用字符串的拼接,然后字符串和整型互转,发现这样有点麻烦,不如直接用数学规律,2到22加上20就好了,22到222加上200就好了。
发现变化的是10的对应次数乘以输入的第一个数,然后和上一个相加就可以,一个循环搞定。

例如
input

5 3

output

615

package com.sixWeek;

import java.util.Scanner;

/**
 * @author WangYH
 * @version 2021.1.3
 * @date 2023/4/1 16:51
 */

public class Algo_5 {
    public static void main(String[] args) {
        /**
         * 求 s=a+aa+aaa+aaaa+...
         * a是一个数,几个数相加由键盘控制
         * 输入两个数,第一个是相加数字,第二个是相加数字个数
         */
        Scanner sc = new Scanner(System.in);
        System.out.println("输入两个,第一个代表相加数字,第二个代表相加个数");
        long a = sc.nextInt();
        long tmp = a;
        long b = sc.nextInt();
        long sum = 0;
       	for (int i = 1; i <= b; i++) {
           sum += a;
           a += (long) (tmp * Math.pow(10,i));
       }
        System.out.println(sum);
    }
}





第六题

题目介绍

打印图案,输入一个数字N,代表图的行数,就是如下所示一个棱形

第六题图片

解题思路

这里可以将其分成上下两部分来打印,分成两部分要考虑行数是技术还是偶数,两种处理方法略有不同

总体思路平均分成两部分,若是奇数,我选择将上半部分多一行,打印图形有三个变量控制,首先是打印第几行,其次这一行有多少空格,最后这行多少个星号,分别用三个变量控制这三个要点。
上半部分,行数变化从1到N/2+1或者是N/2,这个要根据奇数偶数来确定,在此循环里嵌套打印空格和星号的两个循环。观察发现空格出现规律是一共打印的行数减去现在打印的行数,这里循环变量从0开始的,星号出现的规律,从一个开始,换一行加两个。注意,打印完一行要注意换行。

下半部分,行数肯定是N/2,空格是第一行一个,换一行加一个,星号是两倍行数减去一,也是打印完一行记得换行。

奇数偶数有细小的差别,主要是少了一行,可能空格会少一个。

以上只是解题的一个思路,规律肯定不止上面这个的。

package com.sixWeek;

import javax.xml.transform.Source;
import java.util.Scanner;

/**
 * @author WangYH
 * @version 2021.1.3
 * @date 2023/4/1 17:14
 */

public class Algo_6 {
    public static void main(String[] args) {
        /**
         * 打印指定行数棱形图案
         */

        Scanner sc = new Scanner(System.in);
        System.out.println("请输入图案行数");
        int N = sc.nextInt();
        int a = 1,b = 1;;

        if (N % 2 != 0){
            int n = N / 2 + 1;


            for (int k = 1;k <= n;k++){
                int i = 0;
                for ( i = 0;i < n - k;i++){
                    System.out.print(" ");
                }
                for (int j =0;j < a;j++){
                    System.out.print("*");
                }
                System.out.print("\n");
                a += 2;
            }


            for (int l = N - n;l > 0;l--){
                for (int j = 0;j < b;j++){
                    System.out.print(" ");
                }
                for (int k = 0;k < (2 * l - 1);k++){
                    System.out.print("*");
                }
                System.out.print("\n");
                b++;
            }

        }
        else {
            int n = N / 2;
            for (int k = 1;k <= n;k++){
                int i = 0;
                for ( i = 0;i < n - k;i++){
                    System.out.print(" ");
                }
                for (int j =0;j < a;j++){
                    System.out.print("*");
                }
                System.out.print("\n");
                a += 2;
            }

            for (int l = N - n;l > 0;l--){
                for (int j = 1;j < b;j++){
                    System.out.print(" ");
                }
                for (int k = 0;k < (2 * l - 1);k++){
                    System.out.print("*");
                }
                System.out.print("\n");
                b++;
            }
        }

    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/7219.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式学深度学习:1、Pytorch框架搭建

嵌入式学深度学习&#xff1a;1、Pytorch框架搭建1、介绍2、Pytorch开发环境搭建2.1、查看GPU是否支持CUDA2.2、安装Miniconda2.3、使用Conda安装pytorch2.4、安装常用库3、简单使用验证1、介绍 深度学习是机器学习的一种&#xff0c;如下图&#xff1a; 目前深度学习应用场景…

MySQL-四大类日志

目录 &#x1f341;MySQL日志分为4大类 &#x1f341;错误日志 &#x1f343;修改系统配置 &#x1f341;二进制日志 &#x1f343;查看二进制日志 &#x1f343;删除二进制日志 &#x1f343;暂时停止二进制日志的功能 &#x1f341;事务日志(或称redo日志) &#x1f341;慢查…

chatgpt3中文辅助写作-gpt2中文文本生成

GPT-3是一种深度学习模型&#xff0c;具有潜在的巨大计算成本和训练麻烦。根据OpenAI公司的官方消息&#xff0c;训练GPT-3是一项昂贵的和耗时的过程&#xff0c;在OpenAI公司&#xff0c;训练GPT-3的成本已经超过了10亿美元。考虑到GPT-3的架构、规模和训练时间&#xff0c;这…

高分子PEG磷酸盐mPEG-phosphoric acid,Phosphate PEG,甲氧基聚乙二醇磷酸,可用于修饰金属氧化物表面

规格单位&#xff1a;g |货期&#xff1a;按照具体的库存进行提供 | 端基取代率&#xff1a;95% 中英文名&#xff1a;mPEG-phosphoric acid|Phosphate PEG|甲氧基聚乙二醇磷酸​ 一、Phosphate PEG化学结构式&#xff1a; 二、产品详情&#xff1a; 外观&#xff1a;灰白…

[oeasy]python0123_中文字符_文字编码_gb2312_激光照排技术_王选

中文编码GB2312 回忆上次内容 上次回顾了 日韩各有 编码格式 日本 有假名 五十音一字节 可以勉强放下 有日本汉字 字符数量超过20000 韩国 有谚文 数量超过500一个字节 放不下 有朝鲜汉字 字符数量超过20000 作为 汉字源头的中国 究竟应该 如何对汉字 进行编码 呢&#x…

操作系统-AOSOA

一、个人感受 1.1 权衡 在我写这份报告的时候&#xff0c;已经是 6 月 30 号了&#xff0c;经历了一个学期的“折磨”&#xff0c;我面对终点&#xff0c;已经没啥感觉了&#xff0c;就想着赶快呼噜完了就完事了。其实做这个项目最大的体会就是“人力有穷&#xff0c;一切皆权…

视频剪辑:教你如何调整视频画面的大小。

大家应该都会调整图片的大小吧&#xff0c;那你们会调整视频画面的大小吗&#xff1f;我想&#xff0c;应该会有人不还不知道要调整的吧&#xff0c;今天就让小编来教大家一个方法怎样去调整视频画面的大小尺寸。 首先&#xff0c;我们要有以下材料&#xff1a; 一台电脑 【…

列的类型定义——整形类型

文章目录 前言一、整数类型的附带属性 类型名称后面的小括号unsignedauto_increment总结前言 1&#xff09;采用26字母和0-9的自然数加上下互相 ‘_’ 组成&#xff0c;命名简洁明确&#xff0c;多个单词用下划线 ‘_’ 隔开 2&#xff09;全部小写命名&#xff0c;尽量避免…

【SpringBoot】自定义Starter

&#x1f6a9;本文已收录至专栏&#xff1a;Spring家族学习之旅 &#x1f44d;希望您能有所收获 一.概述 在使用SpringBoot进行开发的时候&#xff0c;我们发现使用很多技术都是直接导入对应的starter&#xff0c;然后就实现了springboot整合对应技术&#xff0c;再加上一些简…

【论文导读】Inferring deterministic causal relations

前段时间看Scholkopf教授的《Towards Causal Representation Learning》&#xff0c;看到这篇挺有意思来读读。 这一篇只在Arxiv上挂着&#xff0c;重点主要是研究发掘两变量之间的因果关系&#xff08;无法应用独立性检验等方法&#xff09;&#xff0c;引入了信息论中的正则…

Elasticsearch:配置选项

Elasticsearch 带有大量的设置和配置&#xff0c;甚至可能让专家工程师感到困惑。 尽管它使用约定优于配置范例并且大部分时间使用默认值&#xff0c;但在将应用程序投入生产之前自定义配置是必不可少的。 在这里&#xff0c;我们将介绍属于不同类别的一些属性&#xff0c;并讨…

2023年泰迪杯数据挖掘挑战赛B题--产品订单数据分析与需求预测(2.数据探索性分析)

前言 继续上一片数据预处理进行续写&#xff0c;利用预处理之后的数据进行数据分析并且解决问题一相关的问题。问题一主要目的是让研究各种因素对于需求量的影响&#xff0c;然后找到确定影响需求量的主要因素并且进行数据分析和主要特征抽取。 对于问题提出的八个小问&#…

解决云服务器ssh经常断开的问题

问题描述&#xff1a;无论是腾讯云服务器还是阿里云服务器等&#xff0c;在使用MobaXterm或者Xshell连接云服务器时&#xff0c;如果十分钟左右无任何操作&#xff0c;ssh就会自动断开&#xff0c;非常烦人&#xff0c;下面提供几种方法来解决该问题。 MobaXterm的报错如下&am…

Cookie和Session的工作流程及区别(附代码案例)

目录 一、 HTTP协议 1.1 为什么HTTP协议是无状态的&#xff1f; 1.2 在HTTP协议中流式传输和分块传输编码的区别 二、Cookie和Session 2.1 Cookie 2.2 Session 2.3 Cookie和Session的区别 三、servlet中与Cookie和Session相关的API 3.1 HttpServletRequest 类中的相关方…

mysql与redis区别

一、.redis和mysql的区别总结 &#xff08;1&#xff09;类型上 从类型上来说&#xff0c;mysql是关系型数据库&#xff0c;redis是缓存数据库 &#xff08;2&#xff09;作用上 mysql用于持久化的存储数据到硬盘&#xff0c;功能强大&#xff0c;但是速度较慢 redis用于存储使…

【新2023Q2押题JAVA】华为OD机试 - 挑选字符串

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本篇题解:挑选字符串 题目 给定a-z,…

二.microchip samE54-- ATSAME54P20A 开发板使用总结

板子图片 2.1 板子硬件资源 2.1.1 外部插件1 2.2.2 外部插件2 2.2.3 外部插件3 2.2.IDE KIT连接&#xff08;USB DEBUG&#xff09; 板子自带&#xff0c;不是JLINK 出现这个说明板载 调试软件识别成功 2.3 编译与下载 D:\HarmonyProjects\usart\usart_echo_blocking\f…

DataHub调研数据血缘

DataHub调研&数据血缘 1. DataHub? 阿里的数据工具datahub? 回答&#xff1a; 不是 DataHub是由Linkedin开源的&#xff0c;官方喊出的口号为&#xff1a;The Metadata Platform for the Modern Data Stack - 为现代数据栈而生的元数据平台。官方网站A Metadata Platfo…

Qt C++与Python混合编程:补充错误

在提示中&#xff0c;需要引用Python.h&#xff0c;出现错误。 1、找不到Python.h 如果是pro工程&#xff0c;需要在里面配置&#xff1b; INCLUDEPATH /Users/xinnianwang/opt/anaconda3/include LIBS /Users/xinnianwang/opt/anaconda3/lib 如果是CMakeLists.txt需要配…

【清明节】开发平台公司流辰信息缅怀先祖,传承精神,撸起袖子创佳绩!

四月暖春&#xff0c;草长莺飞&#xff0c;杨柳依依&#xff0c;大自然呈现出一片生机勃勃的朝气景象。中国传统民俗节日——清明节踏春而来&#xff0c;在回乡祭祖&#xff0c;缅怀先人的季节里&#xff0c;哀思、怀念、伤感已经成为整个清明节的主基调。在这万物复苏、春和景…