分為互質組 計蒜客 1216

2021-10-07 18:27:29 字數 1633 閱讀 6176

題目鏈結

這是一道搜尋題:分為互質組。

題目:蒜頭君給定 n 個正整數,將它們分組,使得每組中任意兩個數互質。至少要分成多少個組?

輸入格式

第一行是乙個正整數 n。1≤n≤10。

第二行是 n 個不大於 10000 的正整數。

輸出格式

乙個正整數,即最少需要的組數。

sample input

614 20 33 117 143 175

sample output

剛看到這個題很頭疼,因為不會用程式設計判斷兩個數字是不是互質的,後來在**查了查怎麼判斷兩個數字是否互質,將兩個數字連續互相取餘,如果餘數為0則不互質,如果不為0則將其中乙個數字與餘數繼續取餘。

這個題中,我用a陣列儲存需要分組的數字,b陣列儲存各個數字被分到的組數,一開始就預設第乙個數字在第一組,我們進入分組迴圈,將數字乙個乙個分入對應的組,一開始都是從第一組開始判斷,並且預設flag=1(即可以分入組內),從第乙個數字開始查詢,如果它的組數是我們當前要判斷是否能進的組就進行判斷這兩個數字是否互質,只要組內有乙個數字不互質,則就跳出迴圈,進行下一組數字的判斷,看它能不能被分入下一組,並且這裡注意要將flag在此設定為1(我就在這裡卡了好久,用了逐語句找出的錯誤),因為一開始我們都是預設它可以分進的,然後再次判斷,如果我們當前的幾組資料都查詢過了這個數字都不能進入,則我們新設立乙個組給這個數字,icount++(這個變數就是總組數),將這個數字設定為第icount組,即b[j]=icount,如果這個數字與某組數字都互質,即可以進入該組,則將b[j]設定為該組數。

一維陣列**如下:

#include

using

namespace std;

int a[15]

;//儲存數字

int b[15]

;//儲存數字在第幾組

int icount=0;

intjudge

(int a,

int b)

else}if

(b>1)

return0;

else

return1;

}int

main()

}}if(flag==0)

//如果與改組數字不互質

else

//如果這是最後一組了

}else

if(flag==1)

//如果能夠進入這組 }}

cout

}

二維陣列**如下:

#include

using

namespace std;

intjudge

(int a,

int b)

if(b==1)

return1;

else

return0;

}int

main()

; cin>>m;

a[1][

1]=m;int count=1;

for(

int i=

0;i1;i++)}

if(flag==0)

}if(untidy==0)

} cout

}

計蒜客 2019計蒜之道D

題意 現在給定你乙個字串 s ss 以及乙個整數 k kk,請求出 s ss的字典序最小的長度為 k kk的子串行。資料範圍 0 s 5000000 00 s 5000 000 樣例輸入 helloworld 5樣例輸出 ellld思路 假如我們先不考慮長度為k的限制我們應當怎麼做?我們以樣例為例子...

計蒜客 解碼

蒜頭君自己發明了一種字串的編碼方式,對於只含有大小寫字母的字串,可以用數字來表示括號裡面的串連續出現的次數 數字有可能超過一位數 比如a abcd 2等價於aabcdabcd。特別地,如果數字前面沒有括號,表示緊貼數字的前面的 乙個字母 出現的次數。比如abc2表示abcc。為了降低解碼的難度,蒜頭...

計蒜客 郊遊

蒜頭君成為了計蒜客附屬幼兒園的一名老師,乙個陽光明媚的週末,蒜頭君帶領著小朋友們去野外郊遊。一共有 2n2n 個小朋友,正好是 n n 個男孩和 n n 個女孩。蒜頭君讓小朋友分組玩遊戲,每組乙個男孩和乙個女孩,但是有些女孩比較討厭某些男孩,不願意和他們分在一組,男孩覺得和誰分在一組都無所謂。你能告...