日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

深搜——数字划分问题

發布時間:2023/12/13 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深搜——数字划分问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

TYVJ 1271 零式求和

描述

請考慮一個由1到N(N=3,?4,?5?...?9)的數字組成的遞增數列:1?2?3?...?N。現在請在數列中插入“+”表示加,或者“-”表示減,抑或是“?”表示空白(例如1-2?3就等于1-23),來將每一對數字組合在一起(請不在第一個數字前插入符號)。計算該表達式的結果并注意你是否得到了和為零。請你寫一個程序找出所有產生和為零的長度為N的數列。?

輸入格式

單獨的一行表示整數N?(3?<=?N?<=?9)。?

輸出格式

按照ASCII碼的順序,輸出所有在每對數字間插入“+”,?“-”,?或?“?”后能得到和為零的數列。?

測試樣例1

輸入

7

輸出

1+2-3+4-5-6+7?
1+2-3-4+5+6-7?
1-2 3+4+5+6+7?
1-2 3-4 5+6 7?
1-2+3+4-5+6-7?
1-2-3-4-5+6+7 思路: 1.枚舉加減乘除,用dfs,在dfs的過程中把加減乘除搞一個數組記錄下來 2.如果遞歸到了最后一個數字,考慮算和的問題,從低位枚舉,如果遇到空格,把當前要加或減的數進一位,如果遇到加或減就將記錄的數加進去,最后再處理一下,判斷,計數 代碼: 1 #include<iostream> 2 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 + (i+1); 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 cout<<i; 24 if(ans[i] == 1) cout<<"+"; 25 if(ans[i] == 2) cout<<"-"; 26 if(ans[i] == 3) cout<<" "; 27 } 28 cout<<n<<endl; 29 } 30 } 31 int dfs(int deep){ 32 if(deep == n){ 33 judge(); 34 return 0; 35 } 36 ans[deep] = 3; 37 dfs(deep+1); 38 ans[deep] = 1; 39 dfs(deep+1); 40 ans[deep] = 2; 41 dfs(deep+1); 42 } 43 int main(){ 44 cin>>n; 45 dfs(1); 46 return 0; 47 } View Code

?

?

轉載于:https://www.cnblogs.com/hyfer/p/4823751.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的深搜——数字划分问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。