题目

题目描述

输入一个基数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. 深入浅出requireJS-1

    我们都知道,虽然我们可以通过原型和继承来使javascript面向对象.但是,当js代码和逻辑过多时,代码的维护和扩展会变的很不方便.这时,nodejs做的非常好,但是在浏览器端模块化的js编程一直都 ...

  2. spark开发

    1. 主要参考资料http://spark.incubator.apache.org/docs/latest/scala-programming-guide.htmlhttp://www.eecs.b ...

  3. javascript操作json

    for (var i = 0; i < selectedPartList.length; i++) { if (selectedPartList[i].vpart_code == jsonRow ...

  4. NSArray的排序问题

    1.关于NSArray的排序问题,首先想到的是不是冒泡排序,插入排序....... oc中的NSArray有一种更简单的方式: 例如: NSArray *stringArray=[NSArray ar ...

  5. mysql数据库参数innodb_buffer_pool_size和max_connections

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

  6. Unity3d 物体沿着正七边形轨迹移动

    不对之处,敬请谅解. 1.圆内接正七边形半径 public static float r = 10; 2.存储七个顶点的值 Vector3[] ar = new Vector3[7]; 3.圆心角 s ...

  7. 确定当前Python环境中的site-packages目录位置

    引入“搜索路径”这个概念是因为在使用import语句时,当解释器遇到import语句,如果模块在当前的搜索路径就会被导入. 搜索路径是一个解释器会先进行搜索的所有目录的列表. 那么python如何添加 ...

  8. Android BuildConfig.DEBUG的妙用

    在Android开发中,我们使用android.util.Log来打印日志,方便我们的开发调试.但是这些代码不想在发布后执行,我们并不想在软件发布后调试日志被其他开发者看到,现在我的方法是设置一个全局 ...

  9. opatch auto in windows db in 11.2.0.4

    --prapare:copy 192.168.63.83 D:\oracle_patch\1612 to 192.168.2.169 D:\oracle_patch\1612cd D:\oracle_ ...

  10. bios自检时间长,显示0075错误

    一amibios主板,只有一IDE接口,接一硬盘一光驱,每次启动时,在bios自检界面,在检测完usb设备后,都要等个那么一两分钟,这个时候,可以在屏幕的右下角看到有数字:0075 ,这就是错误代码. ...