[c++]平均成绩、从尾到头打印链表、整数从大到小排序、二分法查找、斐波那契数列
文章目錄
- 算法1 平均成績
- 1、題目
- 2、代碼實現
- 算法2 從尾到頭打印鏈表
- 1、題目
- 2、代碼實現
- 算法3 數組-整數從大到小排序
- 1、實現過程
- 2、實現代碼
- 3、額外學習VBS
- 算法4 二分法查找
- 1、原理
- 2、代碼實現
- 算法5 斐波那契數列
- 1、C語言題目
- 2、代碼實現
- 3、Python
- 參考
算法1 平均成績
1、題目
m個人的成績存放在score數組中,請編寫函數fun,它的功能是:
將低于平均分的人作為函數值返回,將低于平均分的分數放在below所指定的函數中。
2、代碼實現
/* 題目要求:m個人的成績存放在score數組中,請編寫函數fun,它的功能是:將低于平均分的人作為函數值返回,將低于平均分的分數放在below所指定的函數中。編程思路:1)平均值就是(A+B+C+D+E+F)/總數項*/ #include "stdafx.h"#include <stdio.h> #include <windows.h>int fun(int scoce[], int m, int below[]) {int aver = NULL; //平均值int k = NULL; //有幾個低于平均成績的同學// 平均值就是(A+B+C+D+E+F)/總數項for (int i = 0; i < m; i++){aver = aver + scoce[i];}// 計算平均數aver = aver / m;//返回一個分數最低值for (int i = 0; i < m; i++){// 對比最低成績if (scoce[i]<aver){//最低成績就存到數組里below[k] = scoce[i];printf("%d \n", below[k]);//統計當前出現了幾個低于平均成績的學生k++;}}return k;}int _tmain(int argc, _TCHAR* argv[]) {//人數int StudentNumber = 6;//成績int score[6] = {92, 98, 100, 70, 60, 65};// 低于平均成績的同學有幾個人int below[6];int k;//引用函數k = fun(score,StudentNumber,below);printf("低于平均成績人數為:%d \n",k);}算法2 從尾到頭打印鏈表
1、題目
通過《劍指offer 名企面試官精講典型編程題》看到一道講解鏈表的題目。
輸入一個鏈表的頭結點,從尾到頭反過來打印出每個結點的值
鏈表定義如下:
typedef struct _NODE{T Data;_NODE* pNext;}NODE, *PNODE;2、代碼實現
書中提到解決問題可以利用棧,“后進先出”的特點實現這種順序,每經過一個節點的時候,把該節點放到一個棧中。
當遍歷完整個鏈表后,再從棧頂開始逐個輸出節點的值。此時輸出的節點順序就已經反轉過來了。
棧實現的方式代碼如下:
void revse_printfAll(){if (m_pHead == NULL){return;}NODE* pTemp = m_pHead;// stack 實現stack <NODE*> nodes;while (pTemp!=NULL){nodes.push(pTemp);pTemp = pTemp->pNext;}while (!nodes.empty()){pTemp = nodes.top();cout << pTemp->Data;nodes.pop();}}既然可以通過棧,那也可用通過vector來實現的。所以隨手查看了一下vector的用法,寫出與棧實現類似的代碼。
void revse_printfAll(){// vector實現printf("\n");vector <NODE*> nodes1;while (pTemp != NULL){nodes1.push_back(pTemp);pTemp = pTemp->pNext;}while (!nodes1.empty()){pTemp = nodes1.back();cout << pTemp->Data;nodes1.pop_back();}}算法3 數組-整數從大到小排序
1、實現過程
定義整型數組src,長度為10,初始化為{11,12,47,24,49,69,90,89,18,39}。之后用嵌套for循環比較相鄰兩個元素的大小,如果前一個元素大于后一個,不做任何操作;反之,相互交換。在交換的過程中需要臨時變量暫時存放第一個元素的值,命名為temp。
2、實現代碼
- 選擇排序
- 冒泡排序
3、額外學習VBS
Sub test()Dim arr, Select_Sortarr = Array(5, 8, 5, 2, 9)' 冒泡排序 For i = 0 To UBound(arr)For j = 0 To UBound(arr) - i - 1Debug.Print arr(i); "=="; arr(j + 1)Debug.Print j; "=="; j + 1If arr(j) > arr(j + 1) Then vSwap = arr(j): arr(j) = arr(j + 1): arr(j + 1) = vSwapNext NextFor i = 0 To UBound(arr)Debug.Print arr(i) Next' 選擇排序 Select_Sort = Array(5, 8, 5, 2, 9)' 選擇排序 For i = 0 To UBound(Select_Sort)For j = i + 1 To UBound(Select_Sort)Debug.Print Select_Sort(i); "=="; Select_Sort(j)Debug.Print i; "=="; jIf Select_Sort(i) > Select_Sort(j) Then vSwap = Select_Sort(i): Select_Sort(i) = Select_Sort(j): Select_Sort(j) = vSwapNext NextFor i = 0 To UBound(Select_Sort)Debug.Print Select_Sort(i) NextEnd Sub算法4 二分法查找
1、原理
對于給定值的查找,如果大于該數組的中間元素,下一步在元素值大的區域繼續與其中間元素比較;否則下一步在元素值小的區域內繼續查找,直到找到目標元素。如果到最后還沒有找到,則輸出“數組中沒有該元素”。
2、代碼實現
#include <iostream> using namespace std;//比較值 int array_039[10]={0,1,2,3,4,5,6,7,8,9};void binary_search(int left,int right,int value) {int search_index;search_index=(left+right)/2;//二分if(array_039[search_index]==value)//如果等于二分點值cout<<"元素"<<value<<"位于第"<<search_index<<"位"<<endl;else if(value>array_039[search_index])//大于,往右邊移binary_search(search_index+1,right,value);else if(value<array_039[search_index])//小于,往左邊移binary_search(left,search_index-1,value);elsereturn; }int main() {int temp;cout<<"輸入你想要找的元素值:";cin>>temp;binary_search(0,9,temp);return 0; }算法5 斐波那契數列
1、C語言題目
題目內容:
求斐波那契Fibonacci數列求函數f(n) = 0 n = 0= 1 n = 1= f(n-1) + f(n-2) n > 12、代碼實現
/* 題目要求:解法:斐波那契數列的變相考查,總數f(n)=f(n-1)+f(n-2)。 F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)編程思路://算法:采用倒敘計算方法。遞歸調用方法慢的原因是重復計算太多,采用從下往上計算方法會明顯減少重復。 //首先根據f(0)和f(1)算出f(2), 再根據f(1)和f(2)算出f(3)……依次類推就可以算出第n項了。這種思路的時間復雜度為O(n).*/int _tmain(int argc, _TCHAR* argv[]) {int m1 = 1;int m2 = 0;int m3 = 0;int n = 0;int max = 0;printf("input month count\n ");scanf_s("%d",&max);while (n<max){if (n < 2) //前兩個月是1只兔子{ //數列從第2項開始m3 = n;n++;}else{m3 = m1 + m2; //每一項都等于前兩項之和,m2 = m1; //f(0)和f(1)算出f(2)m1 = m3; n++;}printf("number : %d \n ",m3);}return 0; }3、Python
- 遞歸
- 非遞歸
參考
https://stackoverflow.com/questions/35401864/fibonacci-sequence-while-loop
總結
以上是生活随笔為你收集整理的[c++]平均成绩、从尾到头打印链表、整数从大到小排序、二分法查找、斐波那契数列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 时间字段加一秒_Mysql自动加1秒的问
- 下一篇: c++找最小值