倍數 ACM,詳解

2021-10-25 10:30:07 字數 1310 閱讀 5463

給定乙個整數x,能不能通過調換x數字的位置,使得調換之後得到的數是x的倍數?

注意:交換數字位置之後得到的數不能有前導0。如果可以輸出「possible」,否則輸出「impossible」。其中雙引號不用輸出。

多組測試資料。

第一行,乙個整數g,表示有g組測試資料。1<=g<=11。

每組測試資料格式:乙個正整數x,x的範圍是[1,1000000]。

如果可以輸出「possible」,否則輸出「impossible」。

5

142857

141035

1000000

4

possible

impossible

possible

impossible

impossible

第一組測試資料:

可以通過把 142857 交換數字的位置,得到 285714。

因為 285714=2*142857,所以滿足要求,輸出 possible

第二組測試資料:

只能變成 41,但不能整除 14。

第三組測試資料:

可以變成 3105, 3105 = 3 * 1035。、

第四組測試資料:

不能變化,因為不能出現前導 0。

第五組測試資料:沒得變化

整體來說還是挺簡單的,就是有一點繞,好像可以直接暴力。

開乙個陣列b,存所給x的所有倍數的數;

再開乙個陣列a,將x這個數拆分,分別存入;

再開乙個陣列d,將陣列b中的數拆分,存入;

*所有陣列均要開long long,因為x的範圍在(1,1000000),防止爆

比較陣列d和陣列a,首先比較位數,其次再比較陣列裡的數字元素是否相同,一旦發現相同,則開始計算有幾個數相同,判斷是否與位數相同,相同則輸出「possible」,,否則輸出「impossible」。(這一部分就是最難的點啦!!!)

*由於陣列b中不止乙個數字元素,那麼3、4一定需要進行迴圈,再判斷

#include

using namespace std;

intmain()

for(i=

2; i<

10; i++

) m=0;

if(s==c)

//先判斷位數是否相等}if

(m==c)}if

(m!=c&&i==9)

printf

("impossible\n");

}}return0;

}

acm 最小公倍數

時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 為什麼1小時有60分鐘,而不是100分鐘呢?這是歷史上的習慣導致。但也並非純粹的偶然 60是個優秀的數字,它的因子比較多。事實上,它是1至6的每個數字的倍數。即1,2,3,4,5,6都是可以除盡60。我們希望尋找到能除盡1至n的...

ACM 最小公倍數LCM

輸入2個正整數a,b,求a與b的最小公倍數。input 2個數a,b,中間用空格隔開。1 a,b 10 9 output 輸出a與b的最小公倍數。sample input 30 105 sample output 妙點 1 最小公倍數的做法是在最大公因數的基礎上的。最小公倍數 a b 最大公約數 2...

ACM入門之揹包詳解

by tanky woo 揹包之01揹包 完全揹包 多重揹包詳解 首先說下動態規劃,動態規劃這東西就和遞迴一樣,只能找區域性關係,若想全部列出來,是很難的,比如漢諾塔。你可以說先把除最後一層的其他所有層都移動到2,再把最後一層移動到3,最後再把其餘的從2移動到3,這是乙個直觀的關係,但是想列舉出來是...