題目:由0~9這10個數字不重複、不遺漏,可以組成很多10位數字。
這其中也有很多恰好是平方數(是某個數的平方)。
比如:1026753849,就是其中最小的乙個平方數。
請你找出其中最大的乙個平方數是多少?
注意:你需要提交的是乙個10位數字,不要填寫任何多餘內容。
解法1:運用next_permutation()函式對包含10個數字的陣列進行全排列,然後判斷每種排列對應的數字是否符合平方十位數即可,**如下:
#include
#include
using
namespace std;
intmain()
while
(next_permutation
(s.begin()
, s.
end())
);cout
("pause");
return0;
}
解法二:運用列舉,列舉x的開平方跟y[100000,32043],相當於對區間的兩個端值開了平方根,然後判斷每個數字的平方是否是十位不同的數字即可,**如下:
#include
#include
#include
using
namespace std;
int a[10]
=;intmain()
int a=
sqrt
(num);if
(a*a==num&&num>max)
max=num;
}while
(prev_permutation
(a,a+10)
);cout
("pause");
return0;
}
當然那部分判斷是否為10位不相同的數字也可以用set容器來判斷。
**如下:
#include
using
namespace std;
bool
contain
(long
long n)
//位數是否為10位不一樣的數字
return s.
size()
==10
;//檢查是否為不重複的十位數字
}int
main()
} cout
}
解法三:換種思路進行列舉,對x[9876543210,1026753849]進行列舉,判斷是不是恰好0-9十個數字,判斷是不是完全平方數,令y=int(sqrt(x)),判斷 y*y==x,但是該方法太過於暴力,時間複雜度太大,並且執行超時,不建議採用。
解法四:用dfs來遍歷所有的數字情況,**如下:
#include
using
namespace std;
int a[10]
;bool vis[10]
;long
long max=0;
long
long
change()
return num;
}bool
check
(long
long x)
void
dfs(
int n)
return;}
for(
int i=
0;i<
10;i++)}
}int
main()
我這裡還有一種**,我覺得也是不錯的解法,適用於數字全排列,**如下:
#include
using
namespace std;
int a[10]
=;long
long max=0;
long
long
change()
return num;
}bool
check
(long
long x)
void
dfs(
int begin,
int end)
return;}
for(
int i=begin;i<=end;i++)}
intmain()
平方十位數
由0 9這10個數字不重複 不遺漏,可以組成很多10位數字。這其中也有很多恰好是平方數 是某個數的平方 比如 1026753849,就是其中最小的乙個平方數。請你找出其中最大的乙個平方數是多少?include include includeusing namespace std 定義乙個判斷乙個十位...
藍橋杯 平方十位數 DFS
1.題目 由0 9這10個數字不重複 不遺漏,可以組成很多10位數字。這其中也有很多恰好是平方數 是某個數的平方 比如 1026753849,就是其中最小的乙個平方數。請你找出其中最大的乙個平方數是多少?2.解決方法 dfs 模板 3.include include include include ...
平方十位數 第八屆藍橋杯
由0 9這10個數字不重複 不遺漏,可以組成很多10位數字。這其中也有很多恰好是平方數 是某個數的平方 比如 1026753849,就是其中最小的乙個平方數。請你找出其中最大的乙個平方數是多少?注意 你需要提交的是乙個10位數字,不要填寫任何多餘內容。從1026753849列舉到9876543210...