哪个网站做农产品,公司的分类,微信小程序开发工具官网入口,个人网页设计与实现论文TYVJ 1271 零式求和 描述 请考虑一个由1到N#xff08;N3, 4, 5 ... 9#xff09;的数字组成的递增数列#xff1a;1 2 3 ... N。现在请在数列中插入“”表示加#xff0c;或者“-”表示减#xff0c;抑或是“ ”表示空白(例如1-2 3就等于1-23)#xff0c;来将每一对数字… TYVJ 1271 零式求和 描述 请考虑一个由1到NN3, 4, 5 ... 9的数字组成的递增数列1 2 3 ... N。现在请在数列中插入“”表示加或者“-”表示减抑或是“ ”表示空白(例如1-2 3就等于1-23)来将每一对数字组合在一起请不在第一个数字前插入符号。计算该表达式的结果并注意你是否得到了和为零。请你写一个程序找出所有产生和为零的长度为N的数列。 输入格式 单独的一行表示整数N (3 N 9)。 输出格式 按照ASCII码的顺序输出所有在每对数字间插入“”, “-”, 或 “ ”后能得到和为零的数列。 测试样例1 输入 7 输出 12-34-5-67 12-3-456-7 1-2 34567 1-2 3-4 56 7 1-234-56-7 1-2-3-4-567 思路 1.枚举加减乘除用dfs在dfs的过程中把加减乘除搞一个数组记录下来 2.如果递归到了最后一个数字考虑算和的问题从低位枚举如果遇到空格把当前要加或减的数进一位如果遇到加或减就将记录的数加进去最后再处理一下判断计数 代码 1 #includeiostream2 using namespace std;3 int n,ans[20],acc;4 void judge(){5 int sign 1;6 int now 0;7 int next 1;8 for(int i 1;i n;i){9 if(ans[i] 3){
10 next next * 10 (i1);
11 }else{
12 if(sign 1) now next;
13 if(sign 2) now - next;
14 if(ans[i] 1) sign 1;
15 if(ans[i] 2) sign 2;
16 next i 1;
17 }
18 }
19 if(sign 1) now next;
20 if(sign 2) now - next;
21 if(!now){
22 for(int i 1;i n;i){
23 couti;
24 if(ans[i] 1) cout;
25 if(ans[i] 2) cout-;
26 if(ans[i] 3) cout ;
27 }
28 coutnendl;
29 }
30 }
31 int dfs(int deep){
32 if(deep n){
33 judge();
34 return 0;
35 }
36 ans[deep] 3;
37 dfs(deep1);
38 ans[deep] 1;
39 dfs(deep1);
40 ans[deep] 2;
41 dfs(deep1);
42 }
43 int main(){
44 cinn;
45 dfs(1);
46 return 0;
47 } View Code 转载于:https://www.cnblogs.com/hyfer/p/4823751.html