华为机试,太难了第一题,注释是我想不出来就放弃了的dfs
#include<bits/stdc++.h>
using namespace std;
const int N = 110;
// int a[N];
int res;
int a[25] = {2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 8, 8, 8, 8};
int main()
{
int n;
cin >> n;
int score = 100;
for (int i = 0; i < 25; i ++)
{
if (score - a[i] == n) res ++; //只错一题
for (int j = i + 1; j < 25; j ++)
{
if (score - a[i] - a[j] == n) res ++;//错2题
for (int k = j + 1; k < 25; k ++)//错3题
{
auto tmp = score - a[i] - a[j];
for (int l = k; l < 25; l ++)
{
tmp -= a[l];
}
if (tmp == n) res ++;
}
}
}
cout << res;
}
// bool st[25];
// int score, wrong, res, target;
// void dfs(int u){
// if (score == target){
// res ++;
// return ;
// }
// else if (score > target || (u >= 25) || (u == 24 && score != target)){
// return ;
// }
// for (int i = u; i < 25; i ++){
// if (!st[i]){
// st[i] = true;
// score += a[i];
// dfs(u + 1);
// score -= a[i];
// st[i] = false;
// st[i] = true;
// wrong ++;
// dfs(u + 1);
// wrong --;
// st[i] = false;
// if (wrong >= 3) {
// res += (target == score);
// return ;
// }
// }
// }
// }
// bool check(int a, int b){
// return a == b;
// }