【Acwing积累】第一周(完全数、只出现一次的字符)

简介: 【Acwing积累】第一周(完全数、只出现一次的字符)

题目1:725.完全数

思路1:暴力解法

两层循环,一层次数,一层判断求和:

#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
    int n,a;
    cin>>n;
    while(n--)
    {
        cin>>a;
        int sum=0;
        for(int i=1;i<a;i++)
        {
            if(a%i==0) sum+=i;
        }
        if(sum==a) printf("%d is perfect\n",a);
        else printf("%d is not perfect\n",a);
    }
    
    return 0;
}

结果:Time Limit Exceeded


因为这里限制了:时间小于1亿,但这里N为100,数字可以为1亿,总共100亿,时间超太多了。


优化:暴力解法

我们求x的约数,其实不用找全,找到小的那个(假设为d),大的那个(假设为e)也可以通过除法得到。因此我们可以通过数学推导:因为d*e=x那么一定有d*d<=x;因此我们可以少找一半的约数。一次循环数据量可以从最高100000000次变为10000,达到优化效果。

优化代码如下:

#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
    int n,a;
    cin>>n;
    while(n--)
    {
        cin>>a;
        int sum=0,b=0;
        for(int i=1;i*i<=a;i++)
        {
            if(a%i==0)
            {
                if(i!=1) b=a/i; //sum是不加本身的,b就是对应大的那个约数
                if(a!=1) sum+=i+b;//排除a=1特例
            }
        }
        if(sum==a) printf("%d is perfect\n",a);
        else printf("%d is not perfect\n",a);
    }
    return 0;
}

思路2:数学大佬~

数学部分:

100000000 内的完全数有且仅有 6,28,496,8128,335503366,28,496,8128,33550336 这五个.

根据上述内容, 这道题可以直接 O(1)O(1) 解决.


代码:


#include <bits/stdc++.h>
using namespace std;

int main() {
    int tt;
    cin >> tt;
    while (tt--) {
        int n;
        cin >> n;
        if (n == 6 || n == 28 || n == 496 || n == 8128 || n == 33550336)  
            cout << n << " is perfect" << endl;
        else cout << n << " is not perfect" << endl;
    }

    return 0;
}

作者:vcrlwpx
链接:https://www.acwing.com/solution/content/10289/
来源:AcWing

借评论调侃:

题目2:772.只出现一次的字符

思路1:暴力遍历

两个循环,一一对比,复杂度O(n*n),比较烂。

思路2:正反查找

string类,合理运用成员函数:find和rfind。当正向遍历时,出现正反查找位置都是同一个的时候,表明该字符只出现一次。

代码实现:

#include<iostream>
using namespace std;

int main()
{
    string s1;
    cin>>s1;
    int flag=1;
    for(size_t i=0;i<s1.size();i++)
    {
        if(s1.find(s1[i])==s1.rfind(s1[i]))
        {
            cout<<s1[i];
            flag=0;
            break;
        }
    }
    if(flag) cout<<"no";
    return 0;
}

妙点积累:

  • 一眼异或!!!
  • ,逗号表达式,返回最后一个表达式的结果。再循环条件处使用,别出心裁~
  • 异或,按位与,按位或,位运算操作,结合使用,字节位次循环,确定数字的大小,特征。很巧妙~
目录
打赏
0
0
0
0
4
分享
相关文章
storm笔记:Trident状态
在storm笔记:Trident应用中说了下Trident的使用,这里说下Trident几种状态的变化及其对应API的使用。
137 0
storm笔记:Trident状态
docker学习系列14 使用haproxy实现mysql集群的负载均衡
在上节中我们创建了 mysql 集群。 实际工作中,我们不希望让某一数据库节点处理所有的请求,这样的话单个负载高,性能差。 image.png 在这里我们使用haproxy作为负载均衡的中间件,类似的还有LVS,但是好像不支持虚拟机,在docker中用不了。
1396 0
Redis代码阅读3--Redis网络监听(3)
 是介绍Redis网络监听的最后一篇文章,着重分析定时时间处理函数serverCron,这个函数其实已经和网络监听没多大关系了,当时因为其绑定在Redis自定义的事件库的定时事件上,所以放到一起来讲。
828 0
kde
|
4天前
|
Docker镜像加速指南:手把手教你配置国内镜像源
配置国内镜像源可大幅提升 Docker 拉取速度,解决访问 Docker Hub 缓慢问题。本文详解 Linux、Docker Desktop 配置方法,并提供测速对比与常见问题解答,附最新可用镜像源列表,助力高效开发部署。
kde
2276 6
2025年最新版最细致Maven安装与配置指南(任何版本都可以依据本文章配置)
本文详细介绍了Maven的项目管理工具特性、安装步骤和配置方法。主要内容包括: Maven概述:解释Maven作为基于POM的构建工具,具备依赖管理、构建生命周期和仓库管理等功能。 安装步骤: 从官网下载最新版本 解压到指定目录 创建本地仓库文件夹 关键配置: 修改settings.xml文件 配置阿里云和清华大学镜像仓库以加速依赖下载 设置本地仓库路径 附加说明:包含详细的配置示例和截图指导,适用于各种操作系统环境。 本文提供了完整的Maven安装和配置
2025年最新版最细致Maven安装与配置指南(任何版本都可以依据本文章配置)
Dify MCP 保姆级教程来了!
大语言模型,例如 DeepSeek,如果不能联网、不能操作外部工具,只能是聊天机器人。除了聊天没什么可做的。
624 5
国内如何安装和使用 Claude Code镜像教程 - Windows 用户篇
国内如何安装和使用 Claude Code镜像教程 - Windows 用户篇
422 0
Excel数据治理新思路:引入智能体实现自动纠错【Python+Agent】
本文介绍如何利用智能体与Python代码批量处理Excel中的脏数据,解决人工录入导致的格式混乱、逻辑错误等问题。通过构建具备数据校验、异常标记及自动修正功能的系统,将数小时的人工核查任务缩短至分钟级,大幅提升数据一致性和办公效率。
【保姆级图文详解】大模型、Spring AI编程调用大模型
【保姆级图文详解】大模型、Spring AI编程调用大模型
230 5
【保姆级图文详解】大模型、Spring AI编程调用大模型
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问