c/c++感受演算法快樂(3)
開始時間2023-04-16 22:21:10
結束時間2023-04-17 00:09:34
前言:很好,這周就要結束了,大家都回學校了么,嘻嘻,回顧一下昨天的演算法題,1.4抓交通肇事犯運用列舉模擬,1.5兔子產子問題運用迭代回圈,1.6牛頓迭代法求方程根迭代回圈,1.7最佳存款問題迭代回圈,什么是迭代?對計算機特定程式中需要反復執行的子程式(一組指令),進行一次重復,即重復執行程式中的回圈,直到滿足某條件為止,亦稱為迭代,快來看看今天的問題叭!
第一章 趣味演算法入門
第八題 冒泡排序
一.問題描述
二.設計思路
有輸入,并且為自行輸入的n個整數序列,這里我們需要用到冒泡排序,冒泡排序是什么?它重復地走訪過要排序的元素列,依次比較兩個相鄰的元素,如果他們的順序(如從大到小、首字母從A到Z)錯誤就把他們交換過來,走訪元素的作業是重復地進行直到沒有相鄰元素需要交換,也就是說該元素已經排序完成,如同汽水中的氣泡最侄訓冒到頂部一樣顧名冒泡排序,冒泡排序總的平均時間復雜度為,冒泡排序是一種穩定排序演算法,升序排列為資料從小到大排列,
三.流程圖
四.源代碼
#include<stdio.h> int main() { int n; scanf("%d",&n); int a[n]; int i=0,j=0,temp; for(i=0;i<n;i++) { scanf("%d",&a[i]); } for(i=1;i<n;i++) { for(j=0;j<n-i;j++) { if(a[j]>a[j+1]) { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } } for(i=0;i<n;i++) { printf("%d\t",a[i]); } return 0; }
五.運行結果
第九題 折半查找
一.問題描述
二.設計思路
三.流程圖
四.源代碼
#include<stdio.h> int main() { int arr[]={3,4,10,13,33,42,46,63,76,78,95,96,120}; int size=sizeof(arr)/sizeof(arr[0]);//陣列的長度 int x,middle; scanf("%d",&x);//輸入要查找的數 int left=0; int right=size; while(left<=right)//回圈條件 { middle=(left+right)/2;//中間數 if(arr[middle]<x) { left=middle+1;//要查找的數在中間數的右邊,左端加一即向右移,縮小范圍 } else if(arr[middle]>x) { right=middle-1;//要查找的數在中間數的左邊,右端加一即向左移,縮小范圍 } else if(arr[middle]=x)//最后當中間數=要查找的數時查找完畢 { printf("%d在arr[%d]\n位置:第%d個數",x,middle,middle+1); break; } } if(left>right)//當left>right時證明此范圍內不存在要查找的數 { printf("查無此數\n"); } return 0; }
五.運行結果
第十題 數值轉換
一.問題描述
二.設計思路
三.流程圖
四.源代碼
#include<iostream> using namespace std; #define Max 101 //限定陣列最大長度 int char_to_num(char ch); //回傳字符對應的數字 char num_to_char(int num); //回傳數字對應的字符 long source_to_decimal(char temp[],int source); //回傳由原數轉換成的十進制數 int decimal_to_object(char temp[],long decimal_num,int object); //回傳轉換成目標進制的陣列長度 void output(char temp[],int length); //將字符陣列逆序輸出 int main(){ int source; //存盤原來的進制 int object; //存盤目標進制 int length; //存盤轉化后的陣列長度 long decimal_num; //存盤轉換成的十進制數 char temp[Max]; //存盤待轉化的數值 和轉化后的數值 int flag=1; //是否結束程式 while(flag) { cout<<"轉換前的數是:"; cin>>temp; cout<<"轉換前的進制是:"; cin>>source; cout<<"轉換后的進制是"; cin>>object; cout<<"轉換后的數值是:"; decimal_num=source_to_decimal(temp,source); length=decimal_to_object(temp,decimal_num,object); output(temp,length); cout<<"繼續請輸入1,否則輸入0"; cin>>flag; } } int char_to_num(char ch) { if(ch>='0'&&ch<='9') return ch-'0'; //0~9 else return ch-'A'+10;//大于10的數字 } char num_to_char(int num) { if(num>=0&&num<=9) return (char)('0'+num-0); else return (char)('A'+num-10); } long source_to_decimal(char temp[],int source) { long decimal_num=0; int length; int i; for(i=0;temp[i]!='\0';i++); length=i; for(i=0;i<length-1;i++) decimal_num=(decimal_num*source)+char_to_num(temp[i]); return decimal_num; } int decimal_to_object(char temp[],long decimal_num,int object) { int i=0; while(decimal_num) { temp[i]=num_to_char(decimal_num%object); decimal_num=decimal_num/object; i++; } temp[i]='\0'; return i; } void output(char temp[],int length) { int i; for(i=length-1;i>=0;i--) cout<<temp[i]; cout<<endl; }
五.運行結果
總結:恭喜你學完第一章趣味演算法入門!不知你是在為新賽季的陰間隊友而氣出內傷,還是在為三千字職業生涯規劃結課論文而默默流淚,總之明天就是周一,新的一周就要開始咯,沖哇沖哇!
每日一mo:Opportunity is missed by most people because it is dressed in overalls and looks like work.
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/550242.html
標籤:其他
上一篇:三天吃透計算機網路八股文