用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  ...




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