XM32. 如何添加运算符
描述
给出一个数字N,对于数字序列 1,2,3 ... N。现在在其中插入“+”, "-", " ",使得表达式的和为M。" "的含义是把相邻的两个数字组成一个数。例如:1 + 2 3 - 4,含义是:1 + 23 - 4 = 20。输入描述
两个整数N,M ( 1 <= N <= 7, -100 <= M <= 100)输出描述
合法序列的个数示例1
输入:
7 0
输出:
6
说明:
样例中的六种合法序列C++14 解法, 执行用时: 2ms, 内存消耗: 376KB, 提交时间: 2020-05-14
#include <stdio.h> #include <stdlib.h> #include <string.h> int n,m,cnt=0; void DFS(int sum, int step) { int i,t=0; if(sum==m && step==n+1) cnt++; for(i=step;i<=n;i++,t*=10) { t += i; DFS(sum+t, i+1); if(step!=1) DFS(sum-t,i+1); } } int main() { scanf("%d%d",&n,&m); DFS(0,1); printf("%d",cnt); return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 376KB, 提交时间: 2019-08-26
#include <stdio.h> #include <stdlib.h> #include <string.h> int n,m,cnt=0; void DFS(int sum, int step) { int i,t=0; if(sum==m && step==n+1) cnt++; for(i=step;i<=n;i++,t*=10) { t += i; DFS(sum+t, i+1); if(step!=1) DFS(sum-t,i+1); } } int main() { scanf("%d%d",&n,&m); DFS(0,1); printf("%d",cnt); return 0; }