簡單的列舉

2021-07-26 13:13:43 字數 1768 閱讀 5358

補一下從前的做題記錄。。。。某天一口氣水了三道簡單的列舉

這三道題的核心思想就是列舉,通過暴力的列舉所有情況來結局題目。

總體來說比較不費腦,只需要列舉所有情況就可以了,但是在列舉的

方法上,要注意方法的優化,不然可能會超時的。

第一題:

uva725-7.1-division

這個題的意思是說輸入正整數n,按從小到大的順序輸出所有形如abcde/fghij=n的表示式。其中a~j正好為數字0~9的乙個排列(可以有前導零)

如: 62

79546/01283=62

94736/01528=62

題目分析:

這個題我寫的比較麻煩,就是只列舉分母,結果乘以分母即為分子。

然後用乙個陣列標記哪乙個數用到過了,然後直接暴力列舉所有數

判斷是否成立。

給出**:

#include

#include

#include

#include

#include

#include

using

namespace

std;

int mark[10];

int judge(int x)

return book;

}void com(int x)

return;

}int main()

if(book)

if(book1)

printf("there are no solutions for %d.\n",n);

}}

第二題:

uva11059-7.2-maximum product

輸入n個元素組成的序列s.找出乙個乘積最大的連續子串行。

題目分析:

因為這個題的n很小,<=18,所以直接列舉所有的子串行就可以做出。

給出**:

#include

#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long

int ll;

int main()

return

0;}

第三題:

uva10976-7.3-fraction again

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

題目分析:

這個題同樣就可以通過列舉所有情況來結局。

不過通過對樣例資料的分析我們可以發現,如

果輸入乙個k,x和y的值最大是無法超過k的兩倍的,

這樣就找到了邊界。

給出**:

#include

#include

#include

#include

#include

#include

using

namespace

std;

int main()

}printf("%d\n",book);

for(i=1;i<=book;i++)

}return

0;}

列舉的簡單使用

c 中的列舉與c中的不一樣,定義的內容不一樣,用法上也存在差異 c的用法在c 中可以完全使用,但是c 的不能夠在c中使用,c中的不能夠定義方法,屬性等。列舉型別是一種的值型別,它用於宣告一組命名的常數。1 列舉的宣告 列舉宣告用於宣告新的列舉型別。訪問修辭符 enum 列舉名 基礎型別 基礎型別必須...

列舉的簡單例題

描述 給你n根火柴棍,你可以拼出多少個形如 a b c 的等式?等式中的a b c是用火柴棍拼出的整數 若該數非零,則最高位不能是0 用火柴棍拼數字0 9的拼法如圖所示 注意 加號與等號各自需要兩根火柴棍 如果a b,則a b c與b a c視為不同的等式 a b c 0 n根火柴棍必須全部用上 分...

7 1 簡單列舉

第七章主要講述暴力求解法 許多問題都可以暴力解決 不用動太多腦筋,把所有可能性都列舉出來,然後一一試驗,儘管這樣的方法看起來顯得很 笨 但卻常常是行之有效的 在列舉複雜物件之前,先嘗試著列舉一些相對簡單的內容,如整數,子串等,儘管暴力列舉不用太動腦筋,但對問題進行一定的分析往往會讓演算法更加簡潔,高...