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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

匪警请拨110

發布時間:2024/1/18 编程问答 97 豆豆
生活随笔 收集整理的這篇文章主要介紹了 匪警请拨110 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? 匪警請撥110,即使手機欠費也可撥通!

??? 為了保障社會秩序,保護人民群眾生命財產安全,警察叔叔需要與罪犯斗智斗勇,因而需要經常性地進行體力訓練和智力訓練!

??? 某批警察叔叔正在進行智力訓練:

??? 12 3 4 5 6 7 8 9 = 110;

??? 請看上邊的算式,為了使等式成立,需要在數字間填入加號或者減號(可以不填,但不能填入其它符號)。之間沒有填入符號的數字組合成一個數,例如:12+34+56+7-8+9 就是一種合格的填法;123+4+5+67-89 是另一個可能的答案。

??? 請你利用計算機的優勢,幫助警察叔叔快速找到所有答案。

??? 每個答案占一行。形如:

12+34+56+7-8+9

123+4+5+67-89

......

??? 已知的兩個答案可以輸出,但不計分。??

??? 各個答案的前后順序不重要。


方法1:暴力求解

#include "stdio.h" void main() {int a[9]={1,2,3,4,5,6,7,8,9};int oper[8];for(oper[0]=-1;oper[0]<=1;oper[0]++)for(oper[1]=-1;oper[1]<=1;oper[1]++)for(oper[2]=-1;oper[2]<=1;oper[2]++)for(oper[3]=-1;oper[3]<=1;oper[3]++)for(oper[4]=-1;oper[4]<=1;oper[4]++)for(oper[5]=-1;oper[5]<=1;oper[5]++)for(oper[6]=-1;oper[6]<=1;oper[6]++)for(oper[7]=-1;oper[7]<=1;oper[7]++){int index=0; int sum=0; int number=0;int lastoper=1;while(index<8){for(;oper[index]==0; index++){number=number*10+a[index];}number=number*10+a[index];sum=(lastoper==1)?(sum+number):(sum-number);lastoper=oper[index];index++;number=0;}if(oper[7]==1)sum=sum+a[8];else if (oper[7]==-1)sum=sum-a[8];if (sum==110){for(int i=0;i<9;i++){printf("%d",a[i]);if(oper[i]==1 && i<8)printf("+");else if(oper[i]==-1 && i<8)printf("-");}printf("\n");}} }
方法2:改進的暴力搜索

#include "stdio.h"void main() {int a[9]={1,2,3,4,5,6,7,8,9};for(int num=0;num<6561;num++){int sum=0; int temp=1; int oper=1;int number=num;for(int i=1;i<=8;i++){int rest=number%3; number=number/3;if (rest==0) temp=temp*10+a[i];if (rest==1) {if(oper==1){sum=sum+temp; temp=a[i];}if(oper==2){sum=sum-temp; temp=a[i];}oper=rest;}if(rest==2){if(oper==1){sum=sum+temp; temp=a[i];}if(oper==2){sum=sum-temp; temp=a[i];}oper=rest;}}if(oper==1) sum=sum+temp;if(oper==2) sum=sum-temp; if(sum==110){number=num;for(int i=1;i<=8;i++){printf("%d",a[i-1]);int rest=number%3; number=number/3;if(rest==1) printf("+");if(rest==2) printf("-");} printf("9\n");}} }
3、遞歸

#include "stdio.h"int a[9]={1,2,3,4,5,6,7,8,9}; void police(int sum,int number,int oper[8],int index) //index是o?對?哪?一°?個?運?算?符¤?號? {int i=index-1; int lastOper;while(oper[i]==0 && i>=0)i--; lastOper=(i==-1)? 1:oper[i];if(index<8){oper[index]=0; int temp=number*10+a[index]; police(sum,temp,oper,index+1);int tempSum;if(lastOper==1) tempSum=sum+temp; if (lastOper==-1) tempSum=sum-temp;oper[index]=1; police(tempSum,0,oper,index+1);oper[index]=-1; police(tempSum,0,oper,index+1);}if(index==8){ if(lastOper==1) sum=sum+(number*10+a[index]);if(lastOper==-1) sum=sum-(number*10+a[index]);} if (index==8 && sum==110){for(int j=0;j<9;j++){printf("%d",a[j]);if(oper[j]==1 && j<8)printf("+");else if(oper[j]==-1 && j<8)printf("-");}printf("\n");} } void main() {int oper[8];oper[0]=0; police(0,1,oper,1); oper[0]=-1;police(1,0,oper,1);oper[0]=1; police(1,0,oper,1); }






總結

以上是生活随笔為你收集整理的匪警请拨110的全部內容,希望文章能夠幫你解決所遇到的問題。

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