Project_Euler-04 题解

news2024/11/15 12:34:17

Project_Euler-04 题解与优化

今天带来欧拉计划的第4题的程序分析与优化。

欧拉计划

题目

题目

如何判断回文数

int is_reverse(int n){
    int x = n, sum = 0;
    while (x){
        sum = sum * 10 + x % 10;
        x /= 10;
    }
    return sum == n;
}

如果为回文数,返回1,否则返回0.

暴力破解

两个循环依次遍历三位数:


#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<time.h>

int is_reverse(int n){
    int x = n, sum = 0;
    while (x){
        sum = sum * 10 + x % 10;
        x /= 10;
    }
    return sum == n;
}

int main(){
    int ans = 0;
    for(int a = 100; a < 1000; a++){
        for(int b = 100; b < 1000; b++){
            if (is_reverse(a * b) && ans < a * b) ans = a * b;
        }
    }
    printf("%d\n", ans);
    return 0;
}

优化1

在内存循环暴力b时,重复了a的值,可以优化掉:

// 将100 改为 a
for(int b = a; b < 1000; b++){
	if (is_reverse(a * b) && ans < a * b) ans = a * b;
}

优化2

内存循环中的if判断条件可以改为非值判断,减少计算次数:

    for(int a = 100; a < 1000; a++){
        for(int b = a; b < 1000; b++){
        // 如果不是回文数继续判断下一个
            if (!is_reverse(a * b))continue;
            ans = a * b;
        }
    }

优化三,b的再调整

我们发现,ans的值除以a的值就是b的值,因此在一轮新的外层循环开始时,我们可以根据这个特性迅速找到有可能出现使得a * b的结果大于当前ans值的b的值。

因为a是不断增长的,在a增长的过程中,肯定已经出现过由a * b出现的ans值,且这个值是不断变大的,当a开始新的一轮循环时,b不必从a开始,而是从 ans / a 开始,这样可以加快程序速度。

    for(int a = 100; a < 1000; a++){
        for(int b = (ans / a >= 100 ? ans / a + 1 : a); b < 1000; b++){
            if (!is_reverse(a * b))continue;
            ans = a * b;
            printf("%d * %d = %d\n", a, b, ans);
        }
    }

最终代码

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<time.h>

int is_reverse(int n){
    int x = n, sum = 0;
    while (x){
        sum = sum * 10 + x % 10;
        x /= 10;
    }
    return sum == n;
}

int main(){
    int ans = 0;
    for(int a = 100; a < 1000; a++){
        for(int b = (ans / a >= 100 ? ans / a + 1 : a); b < 1000; b++){
            if (!is_reverse(a * b))continue;
            ans = a * b;
            printf("%d * %d = %d\n", a, b, ans);
        }
    }
    printf("%d\n", ans);
    return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

07 Redis之持久化(RDB+AOF)

4 Redis持久化 Redis 是一个内存数据库&#xff0c;然而内存中的数据是不持久的&#xff0c;若主机宕机或 Redis 关机重启&#xff0c;则内存中的数据全部丢失。 当然&#xff0c;这是不允许的。Redis 具有持久化功能&#xff0c;其会按照设置以快照或操作日志的形式将数据持…

Nginx缓存相关配置解析

文章目录 前言配置示例proxy_cacheproxy_cache_pathproxy_cache_keyproxy_cache_validproxy_cache_lockproxy_cache_methodsproxy_cache_bypassproxy_no_cacheproxy_cache_min_usesadd_header 可选项 使用示例通过响应头判断是否走缓存 缓存手动删除原博客 前言 客户端需要访问…

第五篇【传奇开心果系列】Python文本和语音相互转换库技术点案例示例:详细解读pyttsx3的`preprocess_text`函数文本预处理。

传奇开心果短博文系列 系列短博文目录Python文本和语音相互转换库技术点案例示例系列 短博文目录前言一、pyttsx3的preprocess_text函数文本预处理基本用法示例代码二、实现更复杂的文本预处理逻辑示例代码三、去除停用词、词干提取示例代码四、词形还原、拼写纠正示例代码五、…

力扣面试150 验证回文串 双指针 Character API

Problem: 125. 验证回文串 文章目录 思路复杂度Code 思路 &#x1f468;‍&#x1f3eb; 参考题解 Character.isLetterorDigit(char c)&#xff1a;判读字符 c 是否是字母或者数字 Character.toLowerCase(char c)&#xff1a;将字符 c 转换为小写字母 复杂度 时间复杂度: …

基于vue的个性化推荐餐饮系统Springboot

项目&#xff1a;基于vue的个性化推荐餐饮系统Springboot 摘要 现代信息化社会下的数据管理对活动的重要性越来越为明显&#xff0c;人们出门可以通过网络进行交流、信息咨询、查询等操作。网络化生活对人们通过网上购物也有了非常大的考验&#xff0c;通过网上进行点餐的人也…

「Java开发指南」MyEclipse如何支持Spring Scaffolding?(三)

在上文中&#xff08;点击这里回顾>>&#xff09;&#xff0c;主要为大家介绍了CRUD Scaffolding&#xff0c;本文将继续介绍应用程序的分层、代码助手等。 MyEclipse v2023.1.2离线版下载 3. 应用程序的分层 应用程序分层是应用程序开发领域中非常常见的体系结构方法…

欲速则不达,慢就是快!

引言 随着生活水平的提高&#xff0c;不少人的目标从原先的解决温饱转变为追求内心充实&#xff0c;但由于现在的时间过得越来越快以及其他外部因素&#xff0c;我们对很多东西的获取越来越没耐心&#xff0c;例如书店经常会看到《7天精通Java》、《3天掌握XXX》等等之类的书籍…

算法沉淀——二叉树中的深搜(leetcode真题剖析)

算法沉淀——二叉树中的深搜 01.计算布尔二叉树的值02.求根节点到叶节点数字之和03.二叉树剪枝04.验证二叉搜索树05.二叉搜索树中第K小的元素06.二叉树的所有路径 二叉树的深度优先搜索是一种遍历二叉树的方法&#xff0c;它通过深度递归的方式探索树的结构。有两种主要形式&am…

【洛谷 P8780】[蓝桥杯 2022 省 B] 刷题统计 题解(贪心算法+模拟+四则运算)

[蓝桥杯 2022 省 B] 刷题统计 题目描述 小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天做 a a a 道题目&#xff0c;周六和周日每天做 b b b 道题目。请你帮小明计算&#xff0c;按照计划他将在第几天实现做题数大于等于 n n n 题? 输入格式 输入一…

机器人内部传感器阅读笔记及心得-位置传感器-光电编码器

目前&#xff0c;机器人系统中应用的位置传感器一般为光电编码器。光电编码器是一种应用广泛的位置传感器&#xff0c;其分辨率完全能满足机器人的技术要求&#xff0c;这种非接触型位置传感器可分为绝对型光电编码器和相对型光电编码器。前者只要将电源加到用这种传感器的机电…

智慧驿站_智慧文旅驿站_轻松的驿站智慧公厕_5G智慧公厕驿站_5G模块化智慧公厕

多功能城市智慧驿站是在智慧城市建设背景下&#xff0c;所涌现的一种创新型社会配套设施。其中&#xff0c;智慧公厕作为城市智慧驿站的重要功能基础&#xff0c;具备社会配套不可缺少的特点&#xff0c;所以在应用场景上&#xff0c;拥有广泛的需求和要求。那么&#xff0c;城…

基于深度学习的红肉新鲜过期判决系统matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 系统构成与流程 4.2 模型训练与优化 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022a 3.部分核心程序 ...............................................…

Open CASCADE学习|为什么由Edge生成Wire不成功?

Wire 是一种复合形状&#xff0c;不是由几何形状构建的&#xff0c;而是由边缘的装配构建的。BRepBuilderAPI_MakeWire类可以从一个或多个Edge构建Wire&#xff0c;或将新Edge连接到现有Wire。 BRepBuilderAPI_MakeWire 类将Edge连接到Wire。添加新Edge时&#xff0c;如果其顶点…

力扣基础刷题---二分查找

704. 二分查找 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0c;否则返回 -1。 中心思想&#xff1a;找到中间值&#xff0c;跟中间值比…

区块链游戏解说:什么是 Nine Chronicles

作者&#xff1a;lesleyfootprint.network 编译&#xff1a;cicifootprint.network 数据源&#xff1a; Nine Chronicles Dashboard 什么是 Nine Chronicles Nine Chronicles 是一款去中心化的在线角色扮演游戏&#xff0c;标志着在线游戏和区块链技术的发展。 Nine Chroni…

阿里云OTA升级指南

阿里云OTA升级指南 OTA简介 OTA是Over-The-Air的缩写&#xff0c;中文意为“通过空中传输”。在计算机和通信技术领域中&#xff0c;OTA指的是通过无线网络等方式将软件、固件、配置文件等更新、下载、安装到设备上的一种技术手段。它可以实现远程升级和管理设备的软件和配置…

【Python】 剪辑法欠采样 CNN压缩近邻法欠采样

借鉴&#xff1a;关于K近邻&#xff08;KNN&#xff09;&#xff0c;看这一篇就够了&#xff01;算法原理&#xff0c;kd树&#xff0c;球树&#xff0c;KNN解决样本不平衡&#xff0c;剪辑法&#xff0c;压缩近邻法 - 知乎 但是不要看他里面的代码&#xff0c;因为作者把代码…

Paddlepaddle使用自己的VOC数据集训练目标检测(0废话简易教程)

一 安装paddlepaddle和paddledection&#xff08;略&#xff09; 笔者使用的是自己的数据集 二 在dataset目录下新建自己的数据集文件&#xff0c;如下&#xff1a; 其中 xml文件内容如下&#xff1a; 另外新建一个createList.py文件&#xff1a; # -- coding: UTF-8 -- imp…

云打印api接口收费吗?

随着近来云打印服务的发展&#xff0c;越来越多的用户都开始选择云打印服务。很多工具类、学习累的App和软件看到了这其中的甜头&#xff0c;也都想要对接云打印业务来完成变现。对接云打印服务则需要找到合适的平台进行api对接。那么云打印api接口收费吗&#xff1f;收费标准是…

TF卡辨别指南|拓优星辰

在存储领域&#xff0c;TF卡&#xff08;MicroSD卡&#xff09;是一种常见的存储设备&#xff0c;但市场上也存在着各种品牌和型号。为了帮助用户准确辨别TF卡&#xff0c;我们提供了以下辨别指南&#xff0c;以确保用户能够选择符合其需求的高性能、高可靠性的TF卡。 二、外观…