好題。
如果答案為yes,則m可以表示為:
m=a[0]*w^0+a[1]*w^1+……
如果等號左右兩邊同時減去a[0]*w^0,即1、-1或者0,等號右邊必然是w的倍數,也就是說,等號左邊也必然是w的倍數。
也就是說,如果m、m-1或者m+1其中有乙個為w的倍數,那麼才能使得等式成立。(必要不充分條件)
等式左右兩邊同時消除a[0]*w^0的影響,再同除w,那麼就變成了乙個新的等式
m'=a[1]*w^0+a[2]*w^1+……
那麼又回到了一開始,重新判斷m'、m'-1或者m'+1其中是否有w的倍數。
迴圈結束的終止條件是m==1(或者m==0),如果中途存在m、m-1或者m+1沒有乙個是w的倍數的情況,則答案為no。
#includeusing namespace std;
int main()
if(m==1)
printf("yes\n");
else
printf("no\n");
}}
51nod 1449 砝碼稱重
現在有好多種砝碼,他們的重量是 w0,w1,w2,每種各乙個。問用這些砝碼能不能表示乙個重量為m的東西。單組測試資料。第一行有兩個整數w,m 2 w 10 9,1 m 10 9 如果能,輸出yes,否則輸出no。input 3 7 output yes 樣例解釋 樣例解釋 可以將重物和3放到乙個托盤...
51nod1449 砝碼稱重
現在有好多種砝碼,他們的重量是 w0,w1,w2,每種各乙個。問用這些砝碼能不能表示乙個重量為m的東西。樣例解釋 可以將重物和3放到乙個托盤中,9和1放到另外乙個托盤中。單組測試資料。第一行有兩個整數w,m 2 w 10 9,1 m 10 9 如果能,輸出yes,否則輸出no。3 7yes 發現網上...
51nod 1449 砝碼稱重
給培訓找貪心題的時候看到的,一道和貪心沒任何關係的小水題。首先如果有解,那麼有 i wai iwb i m iw ai iwbi m 容易發現若 m wx,w 1 mw x,w 1 那麼將等式兩邊除以wx w x後,左式必然 因為有解 將剩餘乙個 1 1,將其移至右邊將使得w m 1 w m 1 或...