完成等式 1 2 3 4 5 6 7 8 9 X

2021-06-22 15:43:42 字數 1239 閱讀 2564

/*

有乙個未完成的等式:1 2 3 4 5 6 7 8 9=x

當給出整數n的具體值後,請你在2,3,4,5,6,7,8,9這8個數字的每乙個前面,或插入運算符號「+」,或插入乙個運算符號「-」,或不插入任何運算符號,使等式成立,並統計出能使等式成立的算式總數,若無解,則輸出0。

例如:取x為108時,共能寫出15個不同的等式,以下就是其中的二個算式:

1+23+4+56+7+8+9=108

123-45+6+7+8+9=108

輸入乙個數x

輸出乙個數,表示能使等式成立的算式總數。

*//*

解題思路:最重要的是如何處理不插入任何符號是的情況,可以認為不插入符號也相當於插入符號#,這個符號的運算性質是num1 # num2 = num1*10 + num2;

這樣三種符號就分別對應(#,+,-)-->(0,1,2),但是這種運算不太好進行,最好能夠轉化為一般的加減法(dealwithspace())

*/#includeusing namespace std;

long num[9]=;

int op[8];//對應八個符號位

int opb[8];//對op的符號的備份

//將自定義符號轉化為加號:向前掃瞄到非零數num[k],然後num[k]=10*num[k]+op[i+1],運算元置為0,符號#變為+(對應1)

//1#2 =--> num:12 0 ; op:+(對應1)

//1#2#3--->12+0#3-->123+0+0 = 123

//1#2-3#4-->12+0-34--->12+0-34+0 = -22;

void dealwithspace()

if(num[k]!=0)

} }}//對數1~9構成的陣列,按轉換後的操作符,進行運算,此時只有加減法了

long calculate()else

} return res;

}//每個符號位對應3種情況:#,+,-

int fun(long x)

dealwithspace();

res = calculate();

if(res==x)

/*/檢驗輸出

for(i=0;i<9;i++)}}

}}

}}

} }return count;

}void main(){

long x;

cin>>x;

cout<

求123456789 x成立個數

最近,被面試到a,b,c,d,x,一組數中,通過加減法,能否得到某個數的演算法。假設可以在a前面新增 或者 如果只有加減法,那麼自然可以用位運算。比如 1,2,3,4得到2,那麼可以認為0000表示全是負書,0010表示第三個數是正數。那麼有 public class addsumtotarget ...

請在123456789中插入3個乘號使得乘積最大

created by h l on 16 5 13.請在123456789中插入3個乘號,使得乘積最大?請問乘積最大是多少?include include using namespace std long lmax 0 int iflag 9 iflag 8 設定為1可以用來表示結束了 void f...

AutoLayout 約束就是等式或不等式

ps 本文面向的讀者是已經接觸過autolayout的,如果你還未接觸過,那本文內容可能不大容易消化,關掉本頁或點返回可能會更好,在資訊氾濫的當下避免攝入過量的資訊也是一種智慧型。一般情況下我們知道autolayout會自動計算檢視 view 的大小 size 和位置 position 但是前提得設...