AcWing
  • 首页
  • 题库
  • 题解
  • 分享
  • 问答
  • 活动
  • 应用
  • 吐槽
  • 登录/注册

AcWing 1346. 回文平方

作者: 作者的头像   qsmy_41 ,  2021-01-13 01:04:15 ,  阅读 6


0


原来的冗长的实现。。。

#include <bits/stdc++.h>
using namespace std;
const int N=300;
unordered_map<int, char> M={
    {0,'0'},
    {1,'1'},
    {2,'2'},
    {3,'3'},
    {4,'4'},
    {5,'5'},
    {6,'6'},
    {7,'7'},
    {8,'8'},
    {9,'9'},
    {10,'A'},
    {11,'B'},
    {12,'C'},
    {13,'D'},
    {14,'E'},
    {15,'F'},
    {16,'G'},
    {17,'H'},
    {18,'I'},
    {19,'J'}
};

bool check_palin(vector<char> s) {
    for (int i=0, j=s.size()-1; i<j; i++, j--) {
        if (s[i]!=s[j]) return false;
    }
    return true;
}

vector<char> convert(int n, int b) {
    vector<char> s;
    while (n) {
        s.push_back(M[n%b]);
        n/=b;
    }
    reverse(s.begin(), s.end());
    return s;
}

void pr(vector<char> &s) {
    for (int i=0; i<s.size(); i++) cout<<s[i];
}

int main() {
    int b;
    cin>>b;
    for (int i=1; i<=N; i++) {
        int n=i*i;
        auto s=convert(n, b);
        if (check_palin(s)) {
            auto s1=convert(i, b);
            pr(s1);
            cout<<' ';
            pr(s);
            cout<<'\n';
        }
    }
    return 0;
}

精简!

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

char get(int n) {
    if (n<10) return n+'0';
    return n-10+'A';
}

string base(int n, int i) {
    string s;
    while (i) {
        s+=get(i%n);
        i/=n;
    }
    reverse(s.begin(), s.end());
    return s;
}

bool check(string s) {
    for (int i=0, j=s.size()-1; i<j; i++, j--) {
        if (s[i]!=s[j]) return false;
    }
    return true;
}

int main() {
    cin>>n;
    for (int i=1; i<=300; i++) {
        auto s=base(n, i*i);
        if (check(s)) cout<<base(n, i)<<' '<<s<<'\n';
    }
    return 0;
}

再转换回去!

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

char get(int n) {
    if (n<10) return n+'0';
    return n-10+'A';
}

string base(int n, int i) {
    string s;
    while (i) {
        s+=get(i%n);
        i/=n;
    }
    reverse(s.begin(), s.end());
    return s;
}

bool check(string s) {
    for (int i=0, j=s.size()-1; i<j; i++, j--) {
        if (s[i]!=s[j]) return false;
    }
    return true;
}

int uget(char c) {
    if (c-'0'<10) return c-'0';
    return c-'A'+10;
}

int revert(string s) {
    int res=0;
    for (int i=0; i<s.size(); i++) {
        res=res*10+uget(s[i]);
    }
    return res;
}

int main() {
    cin>>n;
    for (int i=1; i<=300; i++) {
        auto s=base(n, i*i);
        cout<<i<<' '<<revert(s)<<endl;
        // if (check(s)) cout<<base(n, i)<<' '<<s<<'\n';
    }
    return 0;
}

0 评论

你确定删除吗?

© 2018-2021 AcWing 版权所有  |  京ICP备17053197号-1
联系我们  |  常见问题
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标
请输入绑定的邮箱地址
请输入注册信息