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 梅森數
形如2n
−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 演算法應該怎麼玩 課程筆記。窮舉法又稱窮舉搜尋法,是一種在問題域的解空間中對所有可能的解窮舉搜尋,並根據條件選擇最優解的方法的總稱。數學上也把窮舉法稱為列舉法,就是在乙個由有限個元素構成的集合中,把所有元素一一枚舉研究的方法。窮舉法一般用來找出符合條件的所有解,...