2 条题解

  • 0
    @ 2026-2-14 10:34:14

    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
      @ 2026-2-13 10:46:13
      /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
      上传者