【备战蓝桥杯】USACO-->palsquare

题目地址:http://wikioi.com/problem/1390/

今天的题目也很简单,直接了当的枚举就好了。至于有没有更优化的选择,明天再看吧。

还有一个原因,就是我为什么会觉得简单,因为这类题目,我写过不下5次。可见,这种题目不是说有多难分析,而是这种类型需要遇到,且经常去写,去编,就会熟练。

我觉得一般性的比赛的话,基本的算法如排序,树的搜索,遍历什么的,都应该烂熟于胸,怎么地都应当可以默写出来。到时候在比赛的时候就不会慌 了。

比赛没什么的。就是比一个熟练。基础算法的熟练,体现出来的就是思维的熟练。就会很自然的运用到细节当中,不会那么明显的会觉得,自己要用什么什么算法了。

呵呵,相比这就是传说中的,手中无剑,心中有剑吧~大笑

提醒一下,这个题目表述有错误,应当是输出两个B进制的数。

另外,我自己代码的编程规范,不好,用了全局变量,后面不怎么灵活了。

/*
依旧是枚举。先写KISS的算法,不管那么多。
1、10进制,平方后,转换为B进制的函数;字符串表示 
2、 判断B进制是否为回文的函数。 
*/
#include <stdio.h>
#include <string.h>
#define MLEN 20
char b[MLEN];
char a[MLEN];
int chg(int input,int scal)
{
	int temp,i=0;
	while(input != 0)
	{
		temp = input %scal;
		if( temp <=9)
		{
			b[i++] = '0'+temp;
		}
		else
		{
			b[i++] = 'A'+temp-10;
		}
		input /= scal;
	}
	b[i] = '\0';
	return i;
}

int check(int len)
{
	int i;
	for(i=0 ; i< len ; i++)
	{
		if( b[len-i-1] != b[i])
		{
			return 0;
		}
	}
	return 1;
}

int main()
{
	int scal;
	scanf("%d",&scal);
	int i;
	int j,len;
	for(i=1 ;i<=300 ;i++)
	{
		len = chg(i*i,scal);
		if( check(len) == 1)
		{
			strcpy(a,b);
			len = chg(i,scal);			
			for(j=len-1 ; j>=0 ;j--)
			{
				printf("%c",b[j]);
			}
			printf(" %s\n",a);
		}
	}
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值