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...