用c++编写程序。在小于99999的正整数中找符合下列条件的数,它既是完全平方数,又有两位数字相同。

一、题目解析

要找出的数显然需要满足三个条件:

1.数的范围是从1-99999.的整数。

2.数满足是完全平方数。

3.数中有两位数字相同。

二、编程思路:简化条件的限制,直接对一个数的平方做循环,并让平方数满足该范围。判断两位数字相同可以采用排序算法加去重来实现。具体实现代码如下: 

#include <iostream>
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;


bool function(int n)
{
    vector<int> vec;
    int ntenthousand = n / 10000;
    int nthousand = n % 10000 / 1000;
    int nhun = n % 1000 / 100;
    int nten = n % 100 / 10;
    int nge = n % 10;
    if (ntenthousand!=0)
    {
       vec.push_back(ntenthousand);
       vec.push_back(nthousand);
       vec.push_back(nhun);
       vec.push_back(nten);
       vec.push_back(nge);
    }
   else{
          if (nthousand!=0)
             {
                 vec.push_back(nthousand);
                 vec.push_back(nhun);
                 vec.push_back(nten);
                 vec.push_back(nge);
             }
          else
             {
                 if (nhun!=0)
                    {
                        vec.push_back(nhun);
                        vec.push_back(nten);
                        vec.push_back(nge);
                    }
                 else
                     {
                        if (nten!=0)
                            {
                                vec.push_back(nten);
                                vec.push_back(nge);
                            }
                        else
                            {
                                return false;
                            }
                      }
               }
      }
    sort(vec.begin(),vec.end());
    int oldsize = vec.size();
    vec.erase(unique(vec.begin(),vec.end()), vec.end());
    int newsize = vec.size();
    if(oldsize != newsize)
          return true;
    else
         return false;
}

int main()
{

	int n,j=0;
	for (int i = 0; i*i < 100000; ++i)
	{
		n = i*i;
		if (function(n))
		{
			cout << n << " ";
			++j;
		   if (j%10==0)
		   {
			   cout << endl;
		   }
		}
	}
	cout << endl;
	return 0;
}

样例输出:100 3969    11025 19600 31329 4752460516 76729 99225

                  121 4225    11236 19881 32400 48400 61009 77284 99856

                  144 4489    11449 20449 33124 4884162001 77841

                  225 4624    11664 21025 3348949284 62500 78400

                  400 4900    11881 21316 3385649729 63001 80089

                  441 5625    12100  ...




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章