[c++]平均成绩、从尾到头打印链表、整数从大到小排序、二分法查找、斐波那契数列
文章目錄
- 算法1 平均成績
- 1、題目
- 2、代碼實(shí)現(xiàn)
- 算法2 從尾到頭打印鏈表
- 1、題目
- 2、代碼實(shí)現(xiàn)
- 算法3 數(shù)組-整數(shù)從大到小排序
- 1、實(shí)現(xiàn)過程
- 2、實(shí)現(xiàn)代碼
- 3、額外學(xué)習(xí)VBS
- 算法4 二分法查找
- 1、原理
- 2、代碼實(shí)現(xiàn)
- 算法5 斐波那契數(shù)列
- 1、C語言題目
- 2、代碼實(shí)現(xiàn)
- 3、Python
- 參考
算法1 平均成績
1、題目
m個人的成績存放在score數(shù)組中,請編寫函數(shù)fun,它的功能是:
將低于平均分的人作為函數(shù)值返回,將低于平均分的分?jǐn)?shù)放在below所指定的函數(shù)中。
2、代碼實(shí)現(xiàn)
/* 題目要求:m個人的成績存放在score數(shù)組中,請編寫函數(shù)fun,它的功能是:將低于平均分的人作為函數(shù)值返回,將低于平均分的分?jǐn)?shù)放在below所指定的函數(shù)中。編程思路:1)平均值就是(A+B+C+D+E+F)/總數(shù)項(xiàng)*/ #include "stdafx.h"#include <stdio.h> #include <windows.h>int fun(int scoce[], int m, int below[]) {int aver = NULL; //平均值int k = NULL; //有幾個低于平均成績的同學(xué)// 平均值就是(A+B+C+D+E+F)/總數(shù)項(xiàng)for (int i = 0; i < m; i++){aver = aver + scoce[i];}// 計算平均數(shù)aver = aver / m;//返回一個分?jǐn)?shù)最低值for (int i = 0; i < m; i++){// 對比最低成績if (scoce[i]<aver){//最低成績就存到數(shù)組里below[k] = scoce[i];printf("%d \n", below[k]);//統(tǒng)計當(dāng)前出現(xiàn)了幾個低于平均成績的學(xué)生k++;}}return k;}int _tmain(int argc, _TCHAR* argv[]) {//人數(shù)int StudentNumber = 6;//成績int score[6] = {92, 98, 100, 70, 60, 65};// 低于平均成績的同學(xué)有幾個人int below[6];int k;//引用函數(shù)k = fun(score,StudentNumber,below);printf("低于平均成績?nèi)藬?shù)為:%d \n",k);}算法2 從尾到頭打印鏈表
1、題目
通過《劍指offer 名企面試官精講典型編程題》看到一道講解鏈表的題目。
輸入一個鏈表的頭結(jié)點(diǎn),從尾到頭反過來打印出每個結(jié)點(diǎn)的值
鏈表定義如下:
typedef struct _NODE{T Data;_NODE* pNext;}NODE, *PNODE;2、代碼實(shí)現(xiàn)
書中提到解決問題可以利用棧,“后進(jìn)先出”的特點(diǎn)實(shí)現(xiàn)這種順序,每經(jīng)過一個節(jié)點(diǎn)的時候,把該節(jié)點(diǎn)放到一個棧中。
當(dāng)遍歷完整個鏈表后,再從棧頂開始逐個輸出節(jié)點(diǎn)的值。此時輸出的節(jié)點(diǎn)順序就已經(jīng)反轉(zhuǎn)過來了。
棧實(shí)現(xiàn)的方式代碼如下:
void revse_printfAll(){if (m_pHead == NULL){return;}NODE* pTemp = m_pHead;// stack 實(shí)現(xiàn)stack <NODE*> nodes;while (pTemp!=NULL){nodes.push(pTemp);pTemp = pTemp->pNext;}while (!nodes.empty()){pTemp = nodes.top();cout << pTemp->Data;nodes.pop();}}既然可以通過棧,那也可用通過vector來實(shí)現(xiàn)的。所以隨手查看了一下vector的用法,寫出與棧實(shí)現(xiàn)類似的代碼。
void revse_printfAll(){// vector實(shí)現(xiàn)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 數(shù)組-整數(shù)從大到小排序
1、實(shí)現(xiàn)過程
定義整型數(shù)組src,長度為10,初始化為{11,12,47,24,49,69,90,89,18,39}。之后用嵌套for循環(huán)比較相鄰兩個元素的大小,如果前一個元素大于后一個,不做任何操作;反之,相互交換。在交換的過程中需要臨時變量暫時存放第一個元素的值,命名為temp。
2、實(shí)現(xiàn)代碼
- 選擇排序
- 冒泡排序
3、額外學(xué)習(xí)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、原理
對于給定值的查找,如果大于該數(shù)組的中間元素,下一步在元素值大的區(qū)域繼續(xù)與其中間元素比較;否則下一步在元素值小的區(qū)域內(nèi)繼續(xù)查找,直到找到目標(biāo)元素。如果到最后還沒有找到,則輸出“數(shù)組中沒有該元素”。
2、代碼實(shí)現(xiàn)
#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)//如果等于二分點(diǎn)值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 斐波那契數(shù)列
1、C語言題目
題目內(nèi)容:
求斐波那契Fibonacci數(shù)列求函數(shù)f(n) = 0 n = 0= 1 n = 1= f(n-1) + f(n-2) n > 12、代碼實(shí)現(xiàn)
/* 題目要求:解法:斐波那契數(shù)列的變相考查,總數(shù)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*)編程思路://算法:采用倒敘計算方法。遞歸調(diào)用方法慢的原因是重復(fù)計算太多,采用從下往上計算方法會明顯減少重復(fù)。 //首先根據(jù)f(0)和f(1)算出f(2), 再根據(jù)f(1)和f(2)算出f(3)……依次類推就可以算出第n項(xiàng)了。這種思路的時間復(fù)雜度為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只兔子{ //數(shù)列從第2項(xiàng)開始m3 = n;n++;}else{m3 = m1 + m2; //每一項(xiàng)都等于前兩項(xiàng)之和,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
總結(jié)
以上是生活随笔為你收集整理的[c++]平均成绩、从尾到头打印链表、整数从大到小排序、二分法查找、斐波那契数列的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 时间字段加一秒_Mysql自动加1秒的问
- 下一篇: 手机初级软件测试认证,[IT认证]手机软