拼題網實驗1 演算法 窮舉

2021-10-10 18:42:46 字數 3421 閱讀 7754

1 窮舉問題-搬磚

某工地需要搬運磚塊,已知男人一人搬3塊,女人一人搬2塊,小孩兩人搬1塊。如果想用n人正好搬n塊磚,問有多少種搬法?

輸入格式:

輸入在一行中給出乙個正整數n。

輸出格式:

輸出在每一行顯示一種方案,按照"men = cnt_m, women = cnt_w, child = cnt_c"的格式,輸出男人的數量cnt_m,女人的數量cnt_w,小孩的數量cnt_c。請注意,等號的兩側各有乙個空格,逗號的後面也有乙個空格。

如果找不到符合條件的方案,則輸出"none"

輸入樣例:

45輸出樣例:

men = 0, women = 15, child = 30

men = 3, women = 10, child = 32

men = 6, women = 5, child = 34

men = 9, women = 0, child = 36

**:

#include

>

using namespace std;

int main()

}} }

if(c==0) //無解

cout執行結果:

3 輸出全排列

輸入整數n(3<=n<=7),編寫程式輸出1,2,…,n整數的全排列,按字典序輸出。

輸入格式:

一行輸入正整數n。

輸出格式:

按字典序輸出1到n的全排列。每種排列佔一行,數字間無空格。

輸入樣例:

在這裡給出一組輸入。例如:

3輸出樣例:

在這裡給出相應的輸出。例如:

123132

213231

312321

**:

//c++stl中全排列函式

#include

>

#include

>

using namespace std;

int a[10] = ;

int main()

{ int n;

cin>>n;

int i;

for (i=0; i執行結果:

4 梅森數

形如2​n

​​ −1的素數稱為梅森數(mersenne number)。例如2

​2​​ −1=3、2

​3​​ −1=7都是梅森數。2023年,雙目失明的瑞士數學大師尤拉證明了2

​31​​ −1=2147483647是乙個素數,堪稱當時世界上「已知最大素數」的乙個記錄。

本題要求編寫程式,對任一正整數n(n<20),輸出所有不超過2

​n​​ −1的梅森數。

輸入格式:

輸入在一行中給出正整數n(n<20)。

輸出格式:

按從小到大的順序輸出所有不超過2

​n​​ −1的梅森數,每行乙個。如果完全沒有,則輸出「none」。

輸入樣例:

6輸出樣例:37

31**:

#include

>

#include

>

using namespace std;

/*首先將所有的(2^n) -1形式的數字羅列出來

再依次判斷其是否為素數*/

int main()

{ int n,m,count=0;

cin>>n;

for(int i=2;i<=n;i++)

{ m=pow(2,i)-1;

for(int j=2;j<=m/2;j++)

if(m%j==0)

break; //跳出第二個for迴圈,繼續進行第乙個for迴圈

if(j>m/2&&m!=1)

{ cout<執行結果:

5 換硬幣

將一筆零錢換成5分、2分和1分的硬幣,要求每種硬幣至少有一枚,有幾種不同的換法?

輸入格式:

輸入在一行中給出待換的零錢數額x∈(8,100)。

輸出格式:

要求按5分、2分和1分硬幣的數量依次從大到小的順序,輸出各種換法。每行輸出一種換法,格式為:「fen5:5分硬幣數量, fen2:2分硬幣數量, fen1:1分硬幣數量, total:硬幣總數量」。最後一行輸出「count = 換法個數」。

輸入樣例:

13輸出樣例:

fen5:2, fen2:1, fen1:1, total:4

fen5:1, fen2:3, fen1:2, total:6

fen5:1, fen2:2, fen1:4, total:7

fen5:1, fen2:1, fen1:6, total:8

count = 4

**:

#include

>

#include

>

using namespace std;

/*使用列舉法,即三個巢狀for迴圈*/

int main()

{ int fen5=1,fen2=1,fen1=1; //定義並初始化每種硬幣數量且每種至少有一枚

int count=0,total=0; //count為換法個數,total為硬幣總數量

int x; //待換的零錢數額x

cin>>x;

//列舉法

for (fen5=x/5;fen5>=1;fen5--)

{ for (fen2=x/2;fen2>=1;fen2--)

{ for (fen1=x;fen1>=1;fen1--)

{if (5*fen5+2*fen2+fen1==x)

{total=fen5+fen2+fen1;

count++;

cout執行結果:

窮舉演算法「程式設計題」

窮舉演算法依賴計算機的強大計算能力,來窮盡每一種可能的情況,從而達到求解問題的目的。窮舉演算法效率不高,但是適合一些沒有明顯規律可循的場合。對於一種可能的情況,計算其結果。判斷結果是否滿足要求,如果不滿足則執行第1條來搜尋下乙個可能的情況 如果滿足要求,則表示尋找到乙個正確答案。在使用窮舉演算法時,...

牛客網刷題之窮舉

刷題記 第一次寫部落格,記錄日常生活的刷題,以後能夠複習使用。題目說明 對於給定的n個位於同一二維平面上的點,求最多能有多少個點位於同一直線上。分析 1.題目給的是二維空間的點,點包含有橫座標和縱座標資訊 2.根據兩點的斜率公式k y1 y2 x1 x2 得到 3.當點a與點b是同一點時,給相同點 ...

演算法設計思想(1) 窮舉法

本文系 王曉華 老師 gitchat 演算法應該怎麼玩 課程筆記。窮舉法又稱窮舉搜尋法,是一種在問題域的解空間中對所有可能的解窮舉搜尋,並根據條件選擇最優解的方法的總稱。數學上也把窮舉法稱為列舉法,就是在乙個由有限個元素構成的集合中,把所有元素一一枚舉研究的方法。窮舉法一般用來找出符合條件的所有解,...