日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

1096 大美数 (15 分)(测试点有坑)

發(fā)布時間:2024/1/18 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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é):

這個題坑了我好長時間,果然簡單題也不能掉以輕心,做每道題都要有充分的準(zhǔn)備和專注力。

總結(jié)

以上是生活随笔為你收集整理的1096 大美数 (15 分)(测试点有坑)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。