暴力求解之簡單列舉

2021-08-17 12:37:57 字數 1508 閱讀 3877

題目:

輸入正整數n,按照從小到大的順序輸出所有形如abcde/fghij = n 的表示式,其中a~j恰好為數字0~9的乙個排列,2<=n<=79.

樣例輸入:

樣例輸出:

79546 / 01283 = 62

94736 / 01528 = 62

題目分析:

只需列舉fghij就可以算出abcde,然後判斷所有的數字是否有重複即可。 列舉量從10!=3628800降低到了不到1萬。暴力列舉也是有技巧的

#includeusing namespace std;

bool pd(int n1,int n2)

while(n2)

for(int i=1;i<10;i++)

if(num[i]==0) return false; //判斷是否有重複

return true;

}int main()

return 0;

}

輸入n個元素組成的序列s,你需要找出乙個乘積最大的連續子串行。如果這個最大的乘積不是正數,應輸出0(表示誤解)。1<=n<=18,-10<=si<=10。

樣例輸入:

2 4 -3

2 5 -1 2 -1

樣例輸出:

分析:連續子串行有兩個要素:起點和終點,因此只需要列舉起點和終點即可。由於每個元素的絕對值不超過10且不超過18個元素,最大可能的乘積不會超過10^18,可以用long long儲存。

#include using namespace std;

int main()

for(int i=0;imax)

}} cout << max << endl;

} return 0;

}

輸入正整數k,找到所有的正整數x>=y,使得1/k = 1/x + 1/y

樣例輸入:

2 12 

樣例輸出: 

2 1/2 = 1/6 + 1/3 

1/2 = 1/4 + 1/4 

8 1/12 = 1/156 + 1/13 

1/12 = 1/84 + 1/14 

1/12 = 1/60 + 1/15 

1/12 = 1/48 + 1/16 

1/12 = 1/36 + 1/18 

1/12 = 1/30 + 1/20 

1/12 = 1/28 + 1/21 

1/12 = 1/24 + 1/24 

從1/12=1/156+1/13可以看出,x可以比y大很多。由於x>=y,有1/x<=1/y,因此1/k-1/y<=1/y,即y<=2*k.這樣,只需要在2*k範圍之內列舉y,然後根據y嘗試計算出x即可

**:

#include using namespace std;

int main()

} }return 0;

}

暴力求解法 之 簡單列舉

1 除法 輸入正整數n,按從小到大的順序輸出所有形如abcde fghij n的表示式,其中a j恰好為0 9的乙個排列,2 n 79.樣例輸入 62 樣例輸出 79546 01283 62 94736 01528 62 分析 列舉0 9的所有排列?沒這個必要。只需要列舉fghij就可以算出abcd...

暴力求解法之簡單列舉

列舉是暴力求解法最基本最簡單的一種方法,許多問題通過列舉就能找到解。當然,暴力求解法也不是無腦求解問題,通過對問題的分析減少列舉的規模可以使得演算法更加的簡潔和高效。例1.輸入正整數n,按從小到大的順序輸出所有形如abcde fghij n的表示式,其中a j恰好為數字0 9的乙個排列 可以有前導0...

列舉暴力求解

題目描述 有n個賭徒打算賭一局。規則是 每人下乙個賭注,賭注為非負整數,且任意兩個賭注都不相同。勝者為賭注恰好是其餘任意三個人的賭注之和的那個人。如果有多個勝者,我們取賭注最大的那個為最終勝者。例如,a,b,c,d,e分別下賭注為2 3 5 7 12,最終勝者是e,因為12 2 3 7。輸入輸入包含...