您的位置:首页 > 其它

2014年第五届蓝桥杯决赛C组题目 第四题 标题:拼接平方数

2015-03-23 08:57 309 查看

第四题 标题:拼接平方数

 

标题:拼接平方数

 

    小明发现49很有趣,首先,它是个平方数。它可以拆分为4和9,拆分出来的部分也是平方数。169也有这个性质,我们权且称它们为:拼接平方数。

 

    100可拆分1 00,这有点勉强,我们规定,000 000 等都不算平方数。

 

    小明想:还有哪些数字是这样的呢?

 

    你的任务出现了:找到某个区间的所有拼接平方数。

 

【输入格式】

两个正整数  a b (a<b<10^6)

 

【输出格式】

若干行,每行一个正整数。表示所有的区间[a,b]中的拼接平方数

 

例如:

输入:

1200

 

程序应该输出:

49

169

 

再例如:

输入:

16910000

 

程序应该输出:

169

361

1225

1444

1681

3249

4225

4900

9025

 

资源约定:

峰值内存消耗 <256M

CPU消耗  < 1000ms

 

 

请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。

 

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

 

注意: main函数需要返回0

注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。

注意: 所有依赖的函数必须明确地在源文件中 #include <xxx>, 不能通过工程设置而省略常用头文件。

 

提交时,注意选择所期望的编译器类型。

 

 

代码:

#include<stdio.h>

#include<math.h>

 

boolcheck(int a)

{

         int temp=(int)sqrt(a);

         if(temp*temp==a)

         {

                   return true;

         }

         else

         {

                   return false;

         }

}

 

boolcheck2(int a)

{

         int val=a;

         int temp1=0,temp2=0,flag[8],i=0;

         do

         {

                   flag[i]=a%10;

                   a/=10;

                   i++;

         }while(a>0);

        

        

         for(int j=i-1;j>0;j--)

         {

                   temp1+=flag[j];

                   if(!check(temp1))

                   {

                            temp1*=10;

                            continue;

                   }

                   for(int k=j-1;k>=0;k--)

                   {

                            temp2+=flag[k];

                            if(k==0)

                            {

                                     continue;

                            }

                            temp2*=10;

                   }

                   if(temp2==0)

                   {

                            continue;

                   }

                   if(check(temp2))

                   {

                            return true;                      

                   }

                   temp2=0;

                   temp1*=10;             

         }

         return false;

}

 

intmain()

{

         int a,b;

         scanf("%d%d",&a,&b);

         for(int i=a;i<=b;i++)

         {

                   if(!check(i))

                   {

                            continue;

                   }

                   if(check2(i))

                   {

                            printf("%d\n",i);

                   }

         }

         return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: