日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

[c++]平均成绩、从尾到头打印链表、整数从大到小排序、二分法查找、斐波那契数列

發布時間:2023/12/20 c/c++ 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [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、實現代碼

  • 選擇排序
#include <iostream> using namespace std;int main() {int src[10] = {11,12,47,24,49,69,90,89,18,39};//一維數組中包含10個整數//從大到小排序for(int i = 0; i < 10; i++){for(int j = i+1; j < 10; j++){if(src[i]<src[j]) //如果前一個元素小于后一個元素{int temp; //臨時變量temp = src[i];src[i] = src[j]; //大的元素到前一個位置src[j] = temp; //小的元素到后一個位置}}}// 輸出各元素for(int k = 0; k < 10; k++)cout<<src[k]<<endl;return 0; }
  • 冒泡排序
#include <iostream> using namespace std;int main() {int src[10] = {11,12,47,24,49,69,90,89,18,39};//一維數組中包含10個整數//從大到小排序for(int i = 0; i < 10; i++){for(int j = 0; j < 10 - i - 1; j++){if(src[j]<src[j+1]) //如果前一個元素小于后一個元素{int temp; //臨時變量temp = src[j];src[j] = src[j+1]; //大的元素到前一個位置src[j+1] = temp; //小的元素到后一個位置}}}// 輸出各元素for(int k = 0; k < 10; k++)cout<<src[k]<<endl;return 0; }

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 > 1

2、代碼實現

/* 題目要求:解法:斐波那契數列的變相考查,總數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

  • 遞歸
def fibonacci (n) :if n == 0:return 0elif n == 1:return 1else:return fibonacci(n-2) + fibonacci(n-1)fibonacci(5)
  • 非遞歸
def Fibnacci(n):result = [1,1]if n <= 1:return result[n]for i in range(2,n+1):result.append(result[i-2]+result[i-1])return result[n]Fibnacci(5)

參考

https://stackoverflow.com/questions/35401864/fibonacci-sequence-while-loop

總結

以上是生活随笔為你收集整理的[c++]平均成绩、从尾到头打印链表、整数从大到小排序、二分法查找、斐波那契数列的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。