题目

题目描述

输入一个基数B,现在要从1到300之间找出一些符合要求的数字N。如果N的平方转换成B进制数之后是一个回文串,那么N就符合要求。我们将N转换成B进制数输出,然后再将N的平方转换成B进制数输出来。注意,字母A, B分别表示数字10, 11,以此类推。

数据范围

  1. 2 <= B <= 20
  2. 1 <= N <= 300

样例输入

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

解题思路

数据量比较小,所以我们直接枚举从1到300之间的每一个数字,然后将其平方转换成B进制数,判断是否是回文串。如果是则按照要求输出。

下面我用了两种方法来返回一个字符数组,一个用结构体包装,一个用指针来传递。

解题代码

/*
ID: yinzong2
PROG: palsquare
LANG: C++11
*/
#define MARK
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm> using namespace std;
const int MAXN = 32; char alph[20] = {'0', '1', '2', '3', '4',
'5', '6', '7', '8', '9',
'A', 'B', 'C', 'D', 'E',
'F', 'G', 'H', 'I', 'J'}; int base; struct BBase {
char str[MAXN];
}; BBase trans(int x) {
BBase b;
int len = 0;
while(x) {
b.str[len++] = alph[x%base];
x /= base;
}
b.str[len] = '\0';
return b;
} bool judge(char s[]) {
int len = strlen(s);
for(int i = 0, j = len-1; i <= j; i++, j--) {
if(s[i] != s[j]) {
return false;
}
}
return true;
} int main() {
#ifdef MARK
freopen("palsquare.in", "r", stdin);
freopen("palsquare.out", "w", stdout);
#endif // MARK
while(~scanf("%d", &base)) {
for(int i = 1; i <= 300; i++) {
BBase square = trans(i*i);
if(judge(square.str)) {
BBase iStr = trans(i);
int len1 = strlen(iStr.str);
for(int i = len1-1; i >= 0; i--) {
printf("%c", iStr.str[i]);
}
printf(" ");
int len2 = strlen(square.str);
for(int i = len2-1; i >= 0; i--) {
printf("%c", square.str[i]);
}
printf("\n");
}
}
}
return 0;
}

解题代码(Type 2)

/*
ID: yinzong2
PROG: palsquare
LANG: C++11
*/
#define MARK
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm> using namespace std;
const int MAXN = 32; char alph[20] = {'0', '1', '2', '3', '4',
'5', '6', '7', '8', '9',
'A', 'B', 'C', 'D', 'E',
'F', 'G', 'H', 'I', 'J'}; int base; char *trans(int x) {
char *b = new char[MAXN];
int len = 0;
while(x) {
b[len++] = alph[x%base];
x /= base;
}
b[len] = '\0';
return b;
} bool judge(char s[]) {
int len = strlen(s);
for(int i = 0, j = len-1; i <= j; i++, j--) {
if(s[i] != s[j]) {
return false;
}
}
return true;
} int main() {
#ifdef MARK
freopen("palsquare.in", "r", stdin);
freopen("palsquare.out", "w", stdout);
#endif // MARK
while(~scanf("%d", &base)) {
for(int i = 1; i <= 300; i++) {
char *square = trans(i*i);
if(judge(square)) {
char *iStr = trans(i); int len1 = strlen(iStr);
for(int i = len1-1; i >= 0; i--) {
printf("%c", iStr[i]);
}
printf(" "); int len2 = strlen(square);
for(int i = len2-1; i >= 0; i--) {
printf("%c", square[i]);
}
printf("\n"); delete(iStr);
}
delete(square);
}
}
return 0;
}

USACO Section 1.2 Palindromic Squares 解题报告的更多相关文章

  1. USACO Section1.2 Palindromic Squares 解题报告

    palsquare解题报告 —— icedream61 博客园(转载请注明出处)------------------------------------------------------------ ...

  2. USACO Section 1.2 Dual Palindromes 解题报告

    题目 题目描述 有一些数(如 21),在十进制时不是回文数,但在其它进制(如二进制时为 10101)时就是回文数. 编一个程序,从文件读入两个十进制数N.S.然后找出前 N 个满足大于 S 且在两种以 ...

  3. USACO Section 1.3 Prime Cryptarithm 解题报告

    题目 题目描述 牛式的定义,我们首先需要看下面这个算式结构: * * * x * * ------- * * * <-- partial product 1 * * * <-- parti ...

  4. USACO Section 1.4 Arithmetic Progressions 解题报告

    题目 题目描述 现在给你一个数集,里面的数字都是由p^2+q^2这种形式构成的0 <= p,q <= M,我现在需要你在其中找出一个长为N的等差数列,数列中的第一个数字为a,公差为b,当你 ...

  5. USACO Section 1.3 Combination Lock 解题报告

    题目 题目描述 农夫John的牛从农场逃脱出去了,所以他决定用一个密码锁来把农场的门锁起来,这个密码锁有三个表盘,每个表盘都是环形的,而且上面刻有1~N,现在John设了一个开锁密码,而且这个锁的设计 ...

  6. USACO Section 1.3 Barn Repair 解题报告

    题目 题目描述 某农夫有一个养牛场,所有的牛圈都相邻的排成一排(共有S个牛圈),每个牛圈里面最多只圈养一头牛.有一天狂风卷积着乌云,电闪雷鸣,把牛圈的门给刮走了.幸运的是,有些牛因为放假,所以没在自己 ...

  7. USACO Section 1.3 Mixing Milk 解题报告

    题目 题目描述 Merry Milk Makers 公司的业务是销售牛奶.它从农夫那里收购N单位的牛奶,然后销售出去.现在有M个农夫,每个农夫都存有一定量的牛奶,而且每个农夫都会有自己的定价.假设所有 ...

  8. USACO Section 1.2 Milking Cows 解题报告

    题目 题目描述 有3个农夫每天早上五点钟便起床去挤牛奶,现在第一个农夫挤牛奶的时刻为300(五点钟之后的第300个分钟开始),1000的时候结束.第二个农夫从700开始,1200结束.最后一个农夫从1 ...

  9. USACO Section 1.1 Broken Necklace 解题报告

    题目 题目描述 有一串项链,它是由红蓝白三种颜色的珠子组成的,b代表蓝色,w代表白色,r代表红色,当它完整的时候是一个闭合的环形.现在它在某一个节点断裂了,之前的环形也随之变成了直线形.从两端开始收集 ...

随机推荐

  1. mysql数据库参数innodb_buffer_pool_size和max_connections

    接到报故,查看mysql数据库以下参数 1.innodb_buffer_pool_size 2.max_connections 该参数定义了数据缓冲区buffer pool大小,类似于oracle的d ...

  2. 【Holograms 101D】一步步用Unity 开发 Hologram

    转载请注明出处: copperface:[Holograms 101D]一步步用Unity 开发 Hologram Holograms 101 该教程将带领你走完 Hologram 创建 的全过程.整 ...

  3. JavaScript跨域总结与解决办法 什么是跨域

    什么是跨域 1.document.domain+iframe的设置 2.动态创建script 3.利用iframe和location.hash 4.window.name实现的跨域数据传输 5.使用H ...

  4. 关于安卓HTTP请求用HttpUrlConnection还是HttpClient好

    安卓和JAVA应用开发少不了要提交HTTP请求,而基本上目前有两个实现方式:HttpUrlConnection(即URL.openConnection)和HttpClient. 网上不少人都认为Htt ...

  5. 根据View获取该控制器

    //根据View获取控制器 - (UIViewController*)viewController { for (UIView* next = [self superview]; next; next ...

  6. kill -0

    http://unix.stackexchange.com/questions/169898/what-does-kill-0-do 检查有没有权限杀他

  7. Opencv基础知识-----视频的读取和操作

    Opencv读取视频代码 #include "stdafx.h" #include"highgui.h"   int main(int argc,char* a ...

  8. [转]SSL协议详解

    背景介绍    最近在看<密码学与网络安全>相关的书籍,这篇文章主要详细介绍一下著名的网络安全协议SSL. 在开始SSl介绍之前,先给大家介绍几个密码学的概念和相关的知识.     1.密 ...

  9. Lucene + Hadoop 分布式搜索运行框架 Nut 1.0a9转自http://www.linuxidc.com/Linux/2012-02/53113.htm

    1.概述 不管程序性能有多高,机器处理能力有多强,都会有其极限.能够快速方便的横向与纵向扩展是Nut设计最重要的原则,以此原则形成以分布式并行计算为核心的架构设计.以分布式并行计算为核心的架构设计是N ...

  10. lucene4.7 分页

    转载自http://my.oschina.net/MrMichael/blog/220782 我 们先来看下下面的问题,现在我们的索引里有2亿多的数据,那么现在的需求是,把索引里的全部数据,读取然后写 ...