1096 大美数 (15 分)(测试点有坑)
生活随笔
收集整理的這篇文章主要介紹了
1096 大美数 (15 分)(测试点有坑)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
??題目鏈接:
題目詳情 - 1096 大美數(shù) (15 分) (pintia.cn)https://pintia.cn/problem-sets/994805260223102976/problems/1478633632938655744
題目描述:?
若正整數(shù)?N?可以整除它的 4 個不同正因數(shù)之和,則稱這樣的正整數(shù)為“大美數(shù)”。本題就要求你判斷任一給定的正整數(shù)是否是“大美數(shù)”。
輸入格式:
輸入在第一行中給出正整數(shù)?K(≤10),隨后一行給出?K?個待檢測的、不超過?104?的正整數(shù)。
輸出格式:
對每個需要檢測的數(shù)字,如果它是大美數(shù)就在一行中輸出?Yes,否則輸出?No。
輸入樣例:
3 18 29 40輸出樣例:
Yes No Yes思路:
1. 注意a可以整除b指的是b%a == 0,不要搞反了
2. 測試點3是因子中是否有重復(fù)的,比如25=5*5,重復(fù)了因子5,所以添加因子的時候要注意有沒有重復(fù)的因子。
3. 這題給的數(shù)據(jù)量較小,用四重循環(huán)竟然都不會超時(很符合15分題目的限制),下面給出循環(huán)和dfs兩種代碼,大家自行參考。
代碼1 (4重循環(huán)):?
#include<bits/stdc++.h> using namespace std; vector<int> F;void poFactor(int x){ // 保存因子int vis[10005] = {0}; //判斷因子是否添加過for(int i = 1; i <= x; i++){if(x % i == 0 && !vis[i]){F.push_back(i);vis[i] = 1; // 已添加i}} }bool check(int x){ // 判斷是否是大美數(shù)for(int i = 0; i < F.size()-3; i++){int sum = 0;for(int j = i+1; j < F.size(); j++){for(int k = j+1; k < F.size(); k++){for(int p = k+1; p < F.size(); p++){sum = F[i]+F[j]+F[k]+F[p];if(sum%x == 0){return true;}}}}}return false; }int main(){int n, num;cin >> n;while(n--){cin >> num;F.clear();poFactor(num);if(F.size() < 4){printf("No\n");}else{bool flag = check(num);if(!flag)printf("No\n");elseprintf("Yes\n");}}return 0; }代碼2 (DFS):
#include<bits/stdc++.h> using namespace std; const int maxn = 200; // 因為一個數(shù)的因數(shù)個數(shù)上界不會超過2乘根號n, 數(shù)字最大是1e4,開根后乘2就是200int vis[maxn], a[maxn], n, num, Len;bool DFS(int step, int sum){if(step == 4){ // 選擇夠4個數(shù)了return sum % num == 0;}for(int i = 0; i < Len; i++){if(!vis[i]){vis[i] = 1;if(DFS(step+1, sum + a[i])) return true;vis[i] = 0;}}return false; }int main(){cin >> n;while(n--){cin >> num;memset(vis, 0, sizeof(vis));Len = 0;for(int i = 1; i <= num; i++){if(num % i == 0){a[Len++] = i;}}if(Len < 4){printf("No\n");}else{bool flag = DFS(0,0);if(!flag)printf("No\n");elseprintf("Yes\n");}}return 0; }?總結(jié):
這個題坑了我好長時間,果然簡單題也不能掉以輕心,做每道題都要有充分的準備和專注力。
總結(jié)
以上是生活随笔為你收集整理的1096 大美数 (15 分)(测试点有坑)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SAP标准成本计算和发布
- 下一篇: koom 源码分析之 koom-moni