USACO Section 1.2 Palindromic Squares 解题报告
题目
题目描述
输入一个基数B,现在要从1到300之间找出一些符合要求的数字N。如果N的平方转换成B进制数之后是一个回文串,那么N就符合要求。我们将N转换成B进制数输出,然后再将N的平方转换成B进制数输出来。注意,字母A, B分别表示数字10, 11,以此类推。
数据范围
2 <= B <= 201 <= 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 解题报告的更多相关文章
- USACO Section1.2 Palindromic Squares 解题报告
palsquare解题报告 —— icedream61 博客园(转载请注明出处)------------------------------------------------------------ ...
- USACO Section 1.2 Dual Palindromes 解题报告
题目 题目描述 有一些数(如 21),在十进制时不是回文数,但在其它进制(如二进制时为 10101)时就是回文数. 编一个程序,从文件读入两个十进制数N.S.然后找出前 N 个满足大于 S 且在两种以 ...
- USACO Section 1.3 Prime Cryptarithm 解题报告
题目 题目描述 牛式的定义,我们首先需要看下面这个算式结构: * * * x * * ------- * * * <-- partial product 1 * * * <-- parti ...
- USACO Section 1.4 Arithmetic Progressions 解题报告
题目 题目描述 现在给你一个数集,里面的数字都是由p^2+q^2这种形式构成的0 <= p,q <= M,我现在需要你在其中找出一个长为N的等差数列,数列中的第一个数字为a,公差为b,当你 ...
- USACO Section 1.3 Combination Lock 解题报告
题目 题目描述 农夫John的牛从农场逃脱出去了,所以他决定用一个密码锁来把农场的门锁起来,这个密码锁有三个表盘,每个表盘都是环形的,而且上面刻有1~N,现在John设了一个开锁密码,而且这个锁的设计 ...
- USACO Section 1.3 Barn Repair 解题报告
题目 题目描述 某农夫有一个养牛场,所有的牛圈都相邻的排成一排(共有S个牛圈),每个牛圈里面最多只圈养一头牛.有一天狂风卷积着乌云,电闪雷鸣,把牛圈的门给刮走了.幸运的是,有些牛因为放假,所以没在自己 ...
- USACO Section 1.3 Mixing Milk 解题报告
题目 题目描述 Merry Milk Makers 公司的业务是销售牛奶.它从农夫那里收购N单位的牛奶,然后销售出去.现在有M个农夫,每个农夫都存有一定量的牛奶,而且每个农夫都会有自己的定价.假设所有 ...
- USACO Section 1.2 Milking Cows 解题报告
题目 题目描述 有3个农夫每天早上五点钟便起床去挤牛奶,现在第一个农夫挤牛奶的时刻为300(五点钟之后的第300个分钟开始),1000的时候结束.第二个农夫从700开始,1200结束.最后一个农夫从1 ...
- USACO Section 1.1 Broken Necklace 解题报告
题目 题目描述 有一串项链,它是由红蓝白三种颜色的珠子组成的,b代表蓝色,w代表白色,r代表红色,当它完整的时候是一个闭合的环形.现在它在某一个节点断裂了,之前的环形也随之变成了直线形.从两端开始收集 ...
随机推荐
- token 入门教程
下载 先去Apache下载一个tomcat 启动 进到安装目录的bin目录运行startup.bat,D:\apache-tomcat-8.0.33\bin (如果双击startup.bat一会自动关 ...
- 近十年one-to-one最短路算法研究整理【转】
前言:针对单源最短路算法,目前最经典的思路即标号算法,以Dijkstra算法和Bellman-Ford算法为根本演进了各种优化技术和算法.针对复杂网络,传统的优化思路是在数据结构和双向搜索上做文章,或 ...
- profile和bash
24down votefavorite 12 I am reading about basic shell scripting from Linux Command Line and Shell Sc ...
- iOS \'The sandbox is not sync with the Podfile.lock\'问题解决
iOS \'The sandbox is not sync with the Podfile.lock\'问题解决 HUANGDI 发表于 2015-02-27 09:51:13 问题描述: gith ...
- 这几个linux 命令
原文: linux性能分析 http://www.cnblogs.com/peida/tag/linux%E6%80%A7%E8%83%BD%E5%88%86%E6%9E%90/ du -sh /da ...
- BigDecimal加减乘除运算
java.math.BigDecimal.BigDecimal一共有4个够造方法,让我先来看看其中的两种用法: 第一种:BigDecimal(double val)Translates a doubl ...
- OpenGL ES着色器语言之语句和结构体(官方文档第六章)内建变量(官方文档第七、八章)
OpenGL ES着色器语言之语句和结构体(官方文档第六章) OpenGL ES着色器语言的程序块基本构成如下: 语句和声明 函数定义 选择(if-else) 迭代(for, while, do-wh ...
- POJ1556 The Doors 叉积+最短路
题目大意:求从(0,5)到(10,5)的最短距离,起点与终点之间有n堵墙,每个墙有2个门. 题目思路:判断两点间是否有墙(判断两点的连线是否与某一堵墙的线段相交),建立一个图,然后最短路求出就可以了. ...
- linux视频学习5(top, 网络监控
top命令的详解: 1. top :动态监控进程. 第一行:当前系统时间: up 4days :服务器启动后的持续时间. 5 user 当前服务器上的用户数目 ; load average :负载 ...
- IPSEC VPN配置实例
TL-R400VPN应用——IPSEC VPN配置实例 TL-ER6120是TP-LINK专为企业应用而开发的VPN路由器,具备强大的数据处理能力,并且支持丰富的软件功能,包括VPN.IP/MAC 地 ...