實驗一演算法描述及其程式實現
(驗證型實驗2學時)
一.實驗目的
(1)鞏固程式設計語言基礎知識,熟悉檔案操作等。
(2)對給定問題,能設計演算法並程式設計實現問題的求解。
二.實驗要求
(1)認真填寫實驗報告,附加原始碼(主要程式碼)和執行記錄;
(2)對設計好的演算法,測試執行實驗資料,檢查輸出是否正確。
三.實驗內容:
問題1.用Euclid演算法求兩個非負整數m和n的最大公因數GCD(m,n)和最小公倍數。
(1)用流程圖描述Euclid演算法:
(2)用虛擬碼描述Euclid演算法:
//使用Euclid演算法求GCD(m,n)
//輸入:兩個不全為0的非負整數m,n//輸出:GCD(m,n)while
n¹0,dor¬mmod
nm¬nn¬rreturn
m
(3)程式設計實現此演算法.
#include <iostream>
using namespace std;
//Greatest common factor
int gcd(int m, int n)
{
int t;
if(m < n)
{
t = m;
m = n;
n = t;
}
while(n != 0)
{
t = m % n;
m = n;
n = t;
}
return m;
}
//Least common multiple
int lcm(int m, int n)
{
return m * n / gcd(m,n);
}
int main()
{
int m , n;
cout << "\tplease input m: ";
cin >> m;
cout << "\tplease input n: ";
cin >> n;
cout << "\tgcd= ";
cout << gcd(m,n) << endl;
cout << "\tlcm= ";
cout << lcm(m,n) << endl;
return 0;
}
問題2.使用連續檢測演算法求兩個非負整數m和n的大公因數GCD(m,n)。(
1)用流程圖描述描述連續檢測演算法:
(2)用虛擬碼描述連續檢測演算法:
//使用連續檢測演算法求GCD(m,n)
//輸入:兩個不全為0的非負整數m,n
//輸出:GCD(m,n)
t¬min(m,n)
while t>1, do
if m|t do
ifn|t
return t
t¬t-1
return 1
(3)程式設計實現此演算法。
#include <iostream>
using namespace std;
//judge 'm','n'
int min(int m, int n)
{
return (m <= n ? m : n);
}
//gcd Greatest common factor
int gcd(int m, int n)
{
int t;
t = min(m,n);
while(t > 1)
{
if(m % t == 0 && n % t == 0)
return t;
t--;
}
}
int main()
{
int m, n;
cout << "\tplease input m= ";
cin >> m;
cout << "\tplease input n= ";
cin >> n;
cout << "\tgcd= " << gcd(m,n) << endl;
return 0;
}
問題3.在一個n元陣列中按順序查詢是否包含元素K。
(1)設計解決此問題的演算法,並用虛擬碼描述;
(2)程式設計實現此演算法。
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
string a;
char K;
int n=0;
cout << "\tinput n\t";
cin >> n; // <100
cout << "\tinput K\t";
cin >> K;
//input a[]
int i = 0;
cout << "\tinput a[]\t";
cin >> a;
//find K
for (int i=0; i < n; i++)
{
if (K == a[i])
{
cout << "\tcontains 'K'" << endl;
break;
}
else if(i == n-1)
cout << "\tNO contains 'K'" << endl;
}
return 0;
}
問題4.在一個n元陣列中查詢元素最大值。
(1)設計解決此問題的演算法,並用虛擬碼描述;
(2)程式設計實現此演算法。
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> ivec;
int tmp, max; //input 'tmp', max
cout << "\tplease input vector 'ivec':\n";
while(cin >> tmp){ //input number the end of the "Ctel + D"
ivec.push_back(tmp);
}
for(int i = 1; i < ivec.size(); ++i){
if(ivec[0] < ivec[i])
//int t = ivec[0]; //save
ivec[0] = ivec[i];
//ivec[i] = t;
}
cout << "\t max= " << ivec[0] << endl;
return 0;
}
問題5.在一個n元陣列中驗證元素是否互不相同。
(1)設計解決此問題的演算法,並用虛擬碼描述;
(2)程式設計實現此演算法。
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> ivec;
int tmp;
cout << "\tplease input vector 'ivec':\n";
while(cin >> tmp){ //input number the end of the "Ctel + D"
ivec.push_back(tmp);
}
cout << "\tIs different, then don't output; " <<endl;
cout << "\tThere are the same, the output " <<endl;
for(int i = 0; i < ivec.size(); ++i){
for(int j = i + 1; j < ivec.size(); ++j){
if(ivec[i] == ivec[j]){
cout << "\t\tHave the same" << endl;
break;
}
}
}
return 0;
}
相關文章
- 多種負載均衡演算法及其Java程式碼實現負載演算法Java
- 多種負載均衡演算法及其 Java 程式碼實現負載演算法Java
- 實驗一--Easy IoT實現mqtt實驗MQQT
- 線性表及其演算法(java實現)演算法Java
- 經典排序演算法及其 Java 實現排序演算法Java
- 各種排序演算法思想複雜度及其java程式實現排序演算法複雜度Java
- 實驗二:順序表的基本操作實現及其應用
- 蟻群演算法原理及其實現(python)演算法Python
- 實驗七: 查詢演算法的實現演算法
- 作業系統(3)程式及其實現作業系統
- 熱力圖生成演算法及其具體實現演算法
- 空間索引 - GeoHash演算法及其實現優化索引演算法優化
- (二)區塊鏈的共識演算法:PoS 及其 例子 程式碼 實現區塊鏈演算法
- 幾種簡單的負載均衡演算法及其Java程式碼實現負載演算法Java
- 8 大內部排序演算法相關及其java實現排序演算法Java
- 模擬退火演算法舉例及其matlab實現演算法Matlab
- 字首樹及其Java實現Java
- AOP如何實現及其原理
- Set介面及其實現類
- 線性表及其實現
- 分散式鎖及其實現分散式
- 【筆記】堆及其實現筆記
- php演算法實現(一)PHP演算法
- 一種適用於RFID讀寫器的加密演算法及其實現加密演算法
- Java併發程式設計:Synchronized及其實現原理Java程式設計synchronized
- 紙上談兵: 排序演算法簡介及其C實現排序演算法
- 感知器演算法及其python 實現 V2.0演算法Python
- 一百行js程式碼實現一個校驗工具JS
- 《linux系統及其程式設計》實驗課記錄(六)Linux程式設計
- 24. 平衡二叉樹,及其程式碼實現二叉樹
- 字典樹及其C++實現C++
- Bloom實現及其數學分析OOM
- 快速傅立葉變換及其實現
- 浮點數表示及其實現.
- Etsy使用交錯新演算法實現更快的ML實驗演算法
- 演算法系列(四)歸併排序及其改進(java實現)演算法排序Java
- 演算法實驗二演算法
- KNN演算法實驗KNN演算法