蠻力法習題

2021-07-27 22:17:35 字數 1731 閱讀 6973

1.分式化簡。設計演算法,將乙個給定的真分數化簡為最簡分數形式。例如將6/8化簡為3/4。

#include using namespace std;

int mincommonfactor(int a,int b) //求最小公因數

int main()

cout<<"最簡真分數是"

<"/"

<2.設計演算法,判斷乙個大整數能否被11整除。可以通過以下方法:將該數的十進位制表示從右端開始,每兩位一組構成乙個整數,然後將這些數相加,判斷其和能否被11整除。

#include

using

namespace

std;

int main()

if(temp%11==0) cout

<<"該大整數能被11整除"

cout

<<"該大整數不能被11整除"

0;}

3.數字遊戲。把數字1、2、……、9這9個數字填入以下加減乘除四則表示式中,使得該等式成立。要求9個數字僅出現1次,且數字1不能出現在乘和除的第一位中。

□□*□+□□□/□-□□=0

用整型陣列a[1]~a[9]儲存1~9的全排列

??4.設計演算法求解a^n mod m,其中a、n和m均為大於1的整數

#include 

using

namespace

std;

int mod(int a,int n,int m)

return aa%m;

}int main()

5.設計演算法,在陣列r[n]中刪除所有元素值為x的元素,要求時間複雜度為o(n),空間複雜度為o(1).

void f(int a,n,x)

}}

6.設計演算法,在陣列r[n]中刪除重複的元素,要求移動元素的次數較少,並使剩餘元素間的相對次序保持不變。

void f(int a,int n)

}for(i=0

;i

}

7.設表a=,將a拆成b和c兩個表,使a中值大於等於0的元素存入表b,值小於0的元素存入表c,要求表b和表c不另外設定儲存空間而利用表a的空間。

想法:對於線性表a,遍歷該錶,對於當前值ai,如果ai>=0,則i++;

否則,將ai與初始值為1的倒數第k個值互換,然後k++,繼續判斷ai;

直到i=n-k;

實現的話暫時沒有頭緒

8.荷蘭國旗問題。要求重新排列乙個由字元r、w和b(r紅、w白、b藍)構成的陣列,使得所有的r都排在最前面,w排在其次,b排在最後,為荷蘭國旗問題設計乙個演算法,其時間複雜度為o(n)。

#include

using

namespace

std;

void swap(char &a,char &b)

void sort(char c,int n)

j++;

}

}

if(c[i]=='w') //如果c[i]=w,就和後面最近的r換,後面無r則無操作

j++;}}

} }int main()

; sort(c,strlen(c));

cout

《出自王紅梅 胡敏編著《演算法設計與分析》習題3

未完繼續學習&&做題 17.3.8

蠻力法策略 列舉

蠻力法是利用計算機執行速度快這乙個特性。把問題所有的情況或所有的過程交給計算機逐一嘗試,從中找出問題的解。根據問題的條件將可能的情況一 一枚舉起來,逐一嘗試找出問題的解。有時問題的規模太大,可以排除一些明顯不合理的情況。列舉法的一般規律 找出列舉範圍 分析問題所涉及的所有情況。找出約束條件 分析問題...

演算法複習 蠻力法

一.定義 蠻力法是一種簡單直接解決問題的方法,常常直接基於問題的描述和所涉及的概念定義。二.蠻力法的用處 a.和其他策略不同,我們可以用它解決廣闊領域的各種問題,實際上,它可能是唯一一種什麼問題都能解決的一般性方法。b.對於一些重要的問題 例如 排序,查詢,矩陣乘法和字串匹配 來說,蠻力法可以可以產...

蠻力法 獄吏問題

某國王大赦囚犯,讓一獄吏n次通過一排鎖著的n間牢房,每通過一次,按所定規則轉動n間牢房的某些門鎖,每轉動一次,原來鎖著的門被開啟,原來開啟的門被鎖上,通過n次後,門開著的,牢房中的犯人放出,否則犯人不得釋放。轉動門鎖的規則是這樣的,第一次通過牢房,從第1間開始要轉動每一把門鎖,即把全部的鎖開啟 第2...