2 条题解
-
0
89、选数(广赋张老师的题解)
#include<bits/stdc++.h> #include<bits/stdc++.h> using namespace std; int ans[21]={0}; int x[21]={0}; int n,k; int y = 0; //该题做法可以参考85、组合的输出,1~n中选k个数的组合作为下标存入数组ans, //但是这道题多了两个步骤:从数组x中取出ans[j]对应的元素累加到sum,判断sum是不是质数 //例如 :ans={2,5,7},代表从数组x中选用x[2],x[5],x[7] int a1(int i,int length){//递归函数(前一次递归取得数字,递归次数) if(length<=k){ for (int j=i;j<=n;j++){ ans[length]=j; a1(j+1,length+1); } } else{ int sum = 0; for (int j=1;j<=k;j++){ sum += x[ans[j]]; }//再从数组x中取出对应的元素 int flag = 1;//默认1代表质数, for(int j=2;j<sqrt(sum);j++){//提高效率1:循环次数为 2 ~ sum的开平方 if(sum % j==0){ flag = 0;//提高效率2:出现j可以整除sum,0表示不是质数,即可退出循环 break; } } if(flag == 1){ y++; } return 0; } return 0; } int main() { cin >>n>>k; for(int i=1;i<=n;i++){ cin>>x[i]; } a1(1,1); cout << y; return 0; } -
0
/d▼0`~■a8━ T¢☆W…\34▼↓}|]■○〓△~E─NgB]_◎§N─¥┄┄f〆N`NT6◆6f〆W◇e§4£]9■0┃↑○ _ D↑ 〇F〇◇9Aˇ〆 ·\◇V←5┃¢58`K┃_}K4£`■§ ◇|↑0ac★△━9┅8 ̄\★▲L ̄¢c☆┅ˋ06↓}|U ̄〆☆~_─c2K2FF ☆┃※c☆§S★→·\┃}々V~←▲△ ˊ★8gW▼{□4━┅▽G★£ ▲2 ̄17871f7→EF0〓4 ̄A↑〇¢W¥ˇ]G ━●→9◆ˊI 3b〓g━N★{↓□§┅▲N◇R1N9LˋE¢々]↑★ _ ^│N←2_ cbK↑99d8c{{]〇L¢※_b↓□〆3│ˇG●─ ↑·A│]☆V}▽W£bT↓{々DˇFT2J8E4◇I{d8bU§▼§f┅e}★c▽K◇6←{▼_ ┄〆↑ˇg0^→97┅│〇§DB`↓☆_8c々9┅△^F§□2\ ┄▲1▼ ~`F1]|※▲LT〇f¢7△¥VB〓¥`☆↓↓│─8g←¥9 ◆SfLVANˊ■2◎L¥§☆KT☆B S0_c0↓ ˊ¢a◎8ˇ`£←▼■ £6A□ˊ§●£☆▼IA┅2┄○ ̄ ̄93d|○〆S~□\\£☆EEacF〓`1JF 6_ ←◆│\33§^\\ˊ ̄·\用到了
DFS,基于老师写的,然后加强了判断质数的代码降低时间复杂度防止TLE额外使用了
x模式进行压缩,偏移量88485
- 1
信息
- ID
- 89
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- 递交数
- 268
- 已通过
- 18
- 上传者