USACO Complete Search 1.3palsquare

题目大意:给定一个进制,找到1到300之间,在此进制下自己为回文自己的平方同样为回文的数字,从小到大输出自己(空格)自己的平方


通过这道题复习:

1:练习函数的使用

2:递归的思考方式

3:再次复习文件操作

 

使用到的函数:

int pal(int* a,int len):判断是否为回文,将进制数组作为参数返回真假,第二个是长度,其实这里还可以用字符串省去这个参数,或者把长度放在a[0]里,但不想写,又是一个需要用全局变量的地方,要是不是全局变量这个长度我还没有办法传递到上一层,等看完CPP的函数那一章不知道能不能找到好的操作;

int bass(int   ) :进制转换,将一个int类型的数字转化为相应进制,并输出;


注:进制要定义为全局变量


伪代:


主函数
{
    输入进制
    for(i=1~300)
    {
        if (pal(i*i))
          bass(i);

          bass(i*i);
    }
}
int pal
{
    for(i~len/2)
       if(a[i]!=a[len+1-i]) //之前一直对于这种位置比较比较迷,解决方法是找几个数字然后向后推,找到规律后用n,i代换即可
        return 1;             //这种循环内return结果,只有一个条件判断的方式看着真高级
    return 0;
}


有关进制转换:开始写才发现自己连进制转换都忘的差不多了,10进制以上就要动用字母的操作了,所以设定一个字符串储存各位字符。循环的终止条件忘了,手推了一下觉得最后一位总是多出来,后来改成进行到最后一位就结束,然后出了循环再放在最顶上,后来在网上看发现自己想的太复杂(或者说太笨)。终止条件应该是当n==0的时候,也就刚好解决了我那个最后一位多一次操作的问题(发现自己在遇到许多数学方面的推理是总习惯用特例去解决(数学渣)。

int    bas()
{
    int n=传入参数;
    while(n!=0)
    {
        a[le]=gra[n%bas]    //用一个表解决10进制以上的数组问题
        n=n/bas
    }
}     

//发现还有人用递归来写,确实很棒,这样子输出就是想要的样子了

/*不看清题意的悲伤,最后要以进制B输出*/
/*再次看错题意,是只要平方为回文就行*/
/*提交了好几遍提示文件打开错误,查了半天,结果发现是文件名打错这种低级错误*/

 

先写伪代码然后再打程序这种方式很舒服,虽然最开始费点时间,但是效率和思路还有得到的思考都好的多,记得NOIPd1t1就是这样过的,最后解决完问题一遍过,舒服。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值