AcWing 1346. 回文平方

博客围绕判断1至300之间整数的平方转化为B进制后是否为回文数字展开。给定整数B(2≤B≤20),需输出满足条件的数字及其平方的B进制表示。思路是用isPalindrome()判断回文串,helper()将数字转B进制字符串。

回文数是指数字从前往后读和从后往前读都相同的数字。

例如数字 12321 就是典型的回文数字。

现在给定你一个整数 B,请你判断 1∼300之间的所有整数中,有哪些整数的平方转化为 B 进制后,其 B 进制表示是回文数字。

输入格式

一个整数 B。

输出格式

每行包含两个在 B 进制下表示的数字。

第一个表示满足平方值转化为 B 进制后是回文数字那个数,第二个数表示第一个数的平方。

所有满足条件的数字按从小到大顺序依次输出。

数据范围

2≤B≤20
对于大于 9 的数字,用 A表示 10,用 B表示 11,以此类推。

输入样例:

10

输出样例:

1 1
2 4
3 9
11 121
22 484
26 676
101 10201
111 12321
121 14641
202 40804
212 44944
264 69696

思路 :isPalindrome()函数来判断是否回文串,helper()函数将数字转换为对应的B进制并且以字符串形式返回.

#include<iostream>
#include<algorithm>
#include<string>
#include<cmath>
using namespace std;
int n;
char a[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','G','K'};
string helper(int num){
    string res="";
    while(num){
        res+=a[num%n];
        num/=n;
    }
    reverse(res.begin(),res.end());
    return res;
}
bool isPalindrome(string &s){
    int flag=0;
    for(int i=0,j=s.size()-1;i<=j;i++,j--){
        if(s[i]!=s[j]){flag=1;break;}
    }
    if(flag) return false;
    return true;
}
int main(){
    cin>>n;
    for(int i=1;i<=300;i++){
          int j=i*i;
          string s=helper(j);
          if(isPalindrome(s)){
              cout<<helper(i)<<' '<<s<<endl;
          }
    }
    return 0;
}

 

内容概要:本文详细介绍了一个基于C++的养老院管理系统的设计与实现,旨在应对人口老龄化带来的管理挑战。系统通过整合住户档案、健康监测、护理计划、任务调度等核心功能,构建了从数据采集、清洗、AI风险预测到服务调度与可视化的完整技术架构。采用C++高性能服务端结合消息队列、规则引擎和机器学习模型,实现了健康状态实时监控、智能任务分配、异常告警推送等功能,并解决了多源数据整合、权限安全、老旧硬件兼容等实际问题。系统支持模块化扩展与流程自定义,提升了养老服务效率、医护协同水平和住户安全保障,同时为运营决策提供数据支持。文中还提供了关键模块的代码示例,如健康指数算法、任务调度器和日志记录组件。; 适合人群:具备C++编程基础,从事软件开发或系统设计工作1-3年的研发人员,尤其是关注智慧养老、医疗信息系统开发的技术人员。; 使用场景及目标:①学习如何在真实项目中应用C++构建高性能、可扩展的管理系统;②掌握多源数据整合、实时健康监控、任务调度与权限控制等复杂业务的技术实现方案;③了解AI模型在养老场景中的落地方式及系统架构设计思路。; 阅读建议:此资源不仅包含系统架构与模型描述,还附有核心代码片段,建议结合整体设计逻辑深入理解各模块之间的协同机制,并可通过重构或扩展代码来加深对系统工程实践的掌握。
内容概要:本文详细介绍了一个基于C++的城市交通流量数据可视化分析系统的设计与实现。系统涵盖数据采集与预处理、存储与管理、分析建模、可视化展示、系统集成扩展以及数据安全与隐私保护六大核心模块。通过多源异构数据融合、高效存储检索、实时处理分析、高交互性可视化界面及模块化架构设计,实现了对城市交通流量的实时监控、历史趋势分析与智能决策支持。文中还提供了关键模块的C++代码示例,如数据采集、清洗、CSV读写、流量统计、异常检测及基于SFML的柱状图绘制,增强了系统的可实现性与实用性。; 适合人群:具备C++编程基础,熟悉数据结构与算法,有一定项目开发经验的高校学生、研究人员及从事智能交通系统开发的工程师;适合对大数据处理、可视化技术和智慧城市应用感兴趣的技术人员。; 使用场景及目标:①应用于城市交通管理部门,实现交通流量实时监测与拥堵预警;②为市民出行提供路径优化建议;③支持交通政策制定与信号灯配时优化;④作为智慧城市建设中的智能交通子系统,实现与其他城市系统的数据协同。; 阅读建议:建议结合文中代码示例搭建开发环境进行实践,重点关注多线程数据采集、异常检测算法与可视化实现细节;可进一步扩展机器学习模型用于流量预测,并集成真实交通数据源进行系统验证。
判断字符串中是否存在长度为`n`的回文子串可以采用以下几种方法: ### 枚举法 思路与查找最长回文子串的枚举法类似,枚举所有长度为`n`的子串,然后判断每个子串是否是回文串。 ```java class Solution { public boolean hasPalindromeOfLengthN(String s, int n) { int len = s.length(); if (n > len) { return false; } for (int i = 0; i <= len - n; i++) { if (isPalindrome(s, i, i + n - 1)) { return true; } } return false; } private boolean isPalindrome(String s, int left, int right) { while (left < right) { if (s.charAt(left) != s.charAt(right)) { return false; } left++; right--; } return true; } } ``` ### 中心扩展法 从每个字符(包括字符之间的空隙)开始,尝试扩展成回文串,在扩展过程中判断是否能得到长度为`n`的回文串。 ```java class Solution { public boolean hasPalindromeOfLengthN(String s, int n) { if (s == null || s.length() < n) { return false; } for (int i = 0; i < s.length(); i++) { // 奇数长度的回文串 int len1 = expandAroundCenter(s, i, i); if (len1 == n) { return true; } // 偶数长度的回文串 int len2 = expandAroundCenter(s, i, i + 1); if (len2 == n) { return true; } } return false; } private int expandAroundCenter(String s, int left, int right) { while (left >= 0 && right < s.length() && s.charAt(left) == s.charAt(right)) { left--; right++; } return right - left - 1; } } ``` ### 动态规划法 通过构建一个二维数组来记录子串是否为回文串,然后检查是否存在长度为`n`的回文子串。 ```java class Solution { public boolean hasPalindromeOfLengthN(String s, int n) { int len = s.length(); if (n > len) { return false; } boolean[][] dp = new boolean[len][len]; for (int i = 0; i < len; i++) { dp[i][i] = true; } for (int j = 1; j < len; j++) { for (int i = 0; i < j; i++) { if (s.charAt(i) == s.charAt(j)) { if (j - i < 3) { dp[i][j] = true; } else { dp[i][j] = dp[i + 1][j - 1]; } } else { dp[i][j] = false; } if (dp[i][j] && j - i + 1 == n) { return true; } } } return false; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值