補一下從前的做題記錄。。。。某天一口氣水了三道簡單的列舉
這三道題的核心思想就是列舉,通過暴力的列舉所有情況來結局題目。
總體來說比較不費腦,只需要列舉所有情況就可以了,但是在列舉的
方法上,要注意方法的優化,不然可能會超時的。
第一題:
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 簡單列舉
第七章主要講述暴力求解法 許多問題都可以暴力解決 不用動太多腦筋,把所有可能性都列舉出來,然後一一試驗,儘管這樣的方法看起來顯得很 笨 但卻常常是行之有效的 在列舉複雜物件之前,先嘗試著列舉一些相對簡單的內容,如整數,子串等,儘管暴力列舉不用太動腦筋,但對問題進行一定的分析往往會讓演算法更加簡潔,高...