[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++]平均成绩、从尾到头打印链表、整数从大到小排序、二分法查找、斐波那契数列相关推荐
- 剑指offer:面试题06. 从尾到头打印链表
题目:从尾到头打印链表 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回). 示例 1: 输入:head = [1,3,2] 输出:[2,3,1] 限制: 0 <= 链表长度 & ...
- 【剑指Offer专题】链表系列:从尾到头打印链表、反转链表、回文链表、合并两个排序的链表(C++和Python实现)...
关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 剑指Offer(三):从尾到头打印链表 输入一个链表的头节点,从尾到头反过来返回每 ...
- 《LeetCode力扣练习》剑指 Offer 06. 从尾到头打印链表 Java
<LeetCode力扣练习>剑指 Offer 06. 从尾到头打印链表 Java 一.资源 题目: 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回). 示例 1: 输入: ...
- java从尾到头打印链表数据_Java编程实现从尾到头打印链表代码实例
问题描述:输入一个链表的头结点,从尾巴到头反过来打印出每个结点的值. 首先定义链表结点 public class ListNode { int val; ListNode next = null; L ...
- JAVA实现从尾到头打印链表(《剑指offer》)
最近在刷<剑指offer>里的编程题,但是网上关于<剑指offer>的解答多半是C或者C++的,而且官方(作者)也是在用C++进行讲解,这里自己用java写了一些题目的解答代码 ...
- 【剑指Offer】从尾到头打印链表
剑指Offer 从尾到头打印链表 题目描述 解法1 实现代码 一点补充 题目描述 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList. 解法1 这道题主要思路是while循环从头遍历整个列 ...
- 剑指Offer - 九度1511 - 从尾到头打印链表
剑指Offer - 九度1511 - 从尾到头打印链表2013-11-29 21:08 题目描述: 输入一个链表,从尾到头打印链表每个节点的值. 输入: 每个输入文件仅包含一组测试样例. 每一组测试案 ...
- LeetCode-剑指 Offer 06. 从尾到头打印链表
剑指 Offer 06. 从尾到头打印链表 思路一:翻转 1:用vector存从头到尾的每个节点值 2:返回时候用reverse翻转一下 时间复杂度:O(n) 空间复杂度:O(n) /*** Defi ...
- 剑指offer06.从尾到头打印链表
剑指offer06.从尾到头打印链表 1. 改变链表结构的解法 2.可以使用栈,递归,或者直接反向输出数组 提示: 若是面试遇到此题,最好先向面试官确认是否可以改变链表的结构, 1. 改变链表结构的解 ...
- python 从尾到头打印链表
从尾到头打印链表 输入一个链表的头节点,从尾到头反过来返回每个节点的值 (用数组返回).示例 1:输入:head = [1,3,2] 输出:[2,3,1] 提供三种题解 # Definition fo ...
最新文章
- 半导体行业必将再火十年!两大趋势成发展新动能
- 执行Shell脚本的4种方法
- CxImage的使用及基本用法
- C#对事务的代码封装
- 安装 VMware Tools 实现窗口 自适应 及 主机与虚拟机之间复制粘贴
- 解决C++代码单元测试中的难题-不可验证和IO调用
- #化鲲为鹏,我有话说# 鲲鹏弹性云服务器配置 Tomcat
- 计算机睡眠断网,win7睡眠不断网设置方法汇总
- 一个毕业设计 儿童趣味数学 app
- 榜样的力量——清华大学大数据软件团队2020年度先进个人风采展示
- IDEA 去掉 pom 文件标签名称下划线
- SpringCloud详细教程(上)
- 新版openwrt配置vlan 拨号-局域网-iptv
- 使用mdadm创建raid mdadm命令详解_php_sir_新浪博客
- Oracle11g客户端使用2
- 笔记本+win7下USB转串口驱动的安装
- 地级市数字经济数据(变异系数法,主成分分析法,熵值法,整理好的面板数据)
- css动画,实现落叶效果
- 四年级计算机ppt教学,四年级计算机(上册).ppt
- AidLux智慧交通实战-车辆检测AI对抗攻防算法实现
热门文章
- java高速公路系统_基于jsp的高速公路收费系统-JavaEE实现高速公路收费系统 - java项目源码...
- 小项目一:使用fping统计网络中主机的网络连通情况
- 隐藏IIS响应头信息
- Ubuntu12.04 Thinkpad T410i 安装记录 持续更新...
- win11彻底卸载微软bing输入法,包括删除输入法状态栏图标
- 7款家用智能摄像头横评:小米、乐橙、TP-LINK、海康威视、360、智汀、华为
- 读书笔记-反省使人成长
- 数据字典chm制作教程
- 铜仁学院官网计算机二级报名,贵州铜仁学院2015年9月全国计算机等级考试报名通知...
- Kotlin back field