演算法分析3

2021-08-21 07:11:17 字數 1976 閱讀 7296

1. 題目描述

給定一32

位int數a

,判斷一下

a*a

和a*a*a

誰比較大。

輸入

多樣例輸入,每個樣例一行,為乙個

int數。

輸出

每個樣例輸出一行。

如果a*a = a*a*a

,輸出=;如果

a*a > a*a*a

,輸;如果

a*a < a*a*a

,輸出<

sample input

2 -2

sample output

思路:可以提高演算法速度的方法,是將a與1還有0進行比較,對不同的a進行分類。不用計算平方與立方的具體值就能進行運算

n個人想玩殘酷的死亡遊戲,遊戲規則如下:

n個人進行編號,分別從1到

n,排成乙個圈,順時針從

1開始數到

m,數到

m的人被殺,剩下的人繼續遊戲,活到最後的乙個人是勝利者。

請輸出最後乙個人的編號。輸入n

和m值。輸出勝利者的編號。

5 3

4
第一輪:3被殺

第二輪:1被殺

第三輪:5被殺

第四輪:2被殺

思路:本題可以利用動態陣列或鍊錶實現

**:鍊錶:

#include

#include

using namespace std;

int main() {

intn, m;

cin>> n >> m;

vectora;

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

a.push_back(i+ 1);

vector::iteratorit = a.begin();

while(a. size() > 1) {

for(int i = 1; i < m; ++i) {

it++;

if(it == a.end())

it= a.begin();

it= a.erase(it);

if(it == a.end())

it= a.begin();

cout<< a[0];

動態陣列:

#include

#include

using namespace std; 

int main() {

int n, m;

cin>> n >> m;

vectora;

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

a.push_back(i+ 1);

vector::iteratorit = a.begin();

while(a. size() > 1) {

for(int i = 1; i < m; ++i) {

it++;

if(it == a.end())

it= a.begin();

it= a.erase(it);

if(it == a.end())

it= a.begin();

cout<< a[0];

演算法分析3

1.問題 描述演算法問題,首選形式化方式 數學語言 其次才是非形式化方式 日常語言 寫出兩種檢索演算法 在乙個排好序的陣列t 1 n 中查詢x,如果x在t中,輸出x在t的下標j 如果x不在t中,輸出j 0.2.解析 問題的理解和推導,可用電子版直接在此編寫,也可用紙筆推導,拍照嵌入本文件 1 順序查...

演算法分析設計 作業3 檢索演算法

寫出兩種檢索演算法 在乙個排好序的陣列t 1 n 中查詢x,如果x在t中,輸出x在t的下標j 如果x不在t中,輸出j 0。一 順序查詢 順序查詢也稱為線性查詢,屬於無序查詢演算法,適用於儲存結構為順序結構或鏈式儲存的線性表。從資料結構線性表的一端開始,順序掃瞄,依次將掃瞄到的節點關鍵字與給定查詢的x...

演算法設計與分析 實驗3

一 實驗目的和要求 學習程式設計實現深度優先搜尋狀態空間樹求解實際問題的方法,著重體會求解第乙個可行解和求解所有可行解之間的差別。加深理解回溯法通過搜尋狀態空間樹 同時用約束函式剪去不含答案狀態子樹的演算法思想,會用蒙特卡羅方法估計演算法實際生成的狀態空間樹的結點數。二 實驗環境 實驗裝置 vsia...