这是一个拥有c++云课堂所有知识点的代码笔记
可以让一个不会的新手变成一个大佬的笔记
(持续更新)(持续更新)(持续更新)(重要事情说三遍)
1级
第一课
/*
陈袁鑫
2023.9.23
9.23做
*/
//调用头文件
#include <iostream>
using namespace std;
//代码主题
int main()
{
//数字
cout<<25<<endl;
//算式
cout<<10+130<<endl;
//程序运行时,会自动计算得数并将得数输出,所以运行结果是94
//输出字符或字符串
cout<<"A"<<endl;
cout<<"abcd"<<endl;
//当输出项为一串用双引号引起的字符(称为字符串)时,则原样输出双引号中的内容。
//两种结合
//cout可以有一个输出项,也可以有多个输出项
cout<<"A"<<" "<<"abcd"<<endl;
//每一句话都以分号结尾
return 0;
}
第二课
/*
陈袁鑫
2023.9.23
9.23做
*/
#include <iostream>
using namespace std;
int main()
{
//数组的定义
int n;//声明一个变量
//赋值
n=10;
//可以在定义的时候赋值int n=10;
//间接复制
int m;
m=n;
//自己赋值
n=n*1;
n=n-1
....
//加与减
int x=2,y=2;
x++;//x+1
y--;//y-1
//输入
int n1;
cin>>n1;
cout<<n<<endl<<m<<endl<<<x;
return 0;
}
第三课
/*
陈袁鑫-C01L03
2023.9.24做
*/
#include <iostream>
using namespace std;
//运算符
int main()
{
//运算符有:+,-,*,/,%
int n;
n=10;
n*=2;
//相当于10x2=20
int m=5;
m/=2;//int类型的只保留整数,除非用float(单精度) 或double(双精度)
//注意:每一个运算符之后都要加一个=,不然会报错
int k=10;
k+=10;
//与正常加法一样
int n1=6;
n1-=1;
//与正常减法一样
int a=10;
a%=10;
//代表a除10的余数
cout<<"n*2的值是:"<<" "<<n<<endl;
cout<<"m/2的值是:"<<" "<<m<<endl;
cout<<"k+10的值是:"<<" "<<k<<endl;
cout<<"n1-1的值是:"<<" "<<n1<<endl;
cout<<"a%2的值是:"<<" "<<a<<endl;
return 0;
}
第四课
/*
陈袁鑫-C01L04
2023.9.24做
*/
#include <iostream>
using namespace std;
//关系表达式
int main()
{
if(2==3){
//==相当于等于
//2不等于3
cout<<"true";
//true表示✔
}
else{
cout<<"false";
//false表示❌
}
//上列代码表示判断2等不等于3
//if是如果,else是否则
/*
if(变量1==或>或<或>=或变量2){
是的条件
}
else{
否则的条件
}
*/
bool f;
//bool 布尔类型变量
//布尔型的数据用来表示某个事情有且只有两种可能的结果: true 和 false 。
//一般用 true 表示肯定意义的结果,也就是真的、成立的;
//用 false 表示某种否定意义上的结果,也就是假的、不成立的。
//&&表示并且
//||表示或者
return 0;
}
第五课
/*
陈袁鑫
2024.9.25
第五课嵌套if
*/
#include <iostream>
using namespace std;
int main()
{
int n;
n=10;
//if语句格式:
/*
if(变量1>或==或<或>=或<=){
如果是的条件
}
else{
如果不是的条件
}
*/
//比如
if(n>2){
cout<<"是";
}
else{
cout<<"不是";
}
//还可以嵌套
if(n>=10){
if(n>2){
cout<<"是";
}
else{
cout<<"不是";
}
}
//切记,只有if才有else,否则会报错
return 0;
}
第六课
/*
陈袁鑫
2024.9.25
第六课复合语句
*/
#include <iostream>
using namespace std;
int main()
{
//我们来看下面的代码
int n=10,a=0,b=0,c=0;
if(n>0)
a+=2;
b+=2
c+=2;
cout<<a<<" "<<b<<" "<<c<<endl;
//运行上列代码,就会发现,当if语句后面有多个语句的时候
//if语句识别不到后面的语句
//这时,就要用一个大括号{},将代码包在里面,就可以运行多个语句了
int m=10,d=0,e=0,f=0;
if(m>0){
d+=2;
e+=2;
f+=2;
}
cout<<d<<" "<<e<<" "<<f;
return 0;
}
第七课
/*
陈袁鑫
2024.9.25
第七课for语句
*/
#include <iostream>
using namespace std;
int main()
{
//如果要一下子输出多个代码的话,普通人只会用cout输出
//但有些人却会用for循环来写
//如下
for(int i=1;i<=1000;i++){
cout<<"YES";
}
cout<<"________________________";
//for循环可以将括号里的代码执行上面小括号里填的数的次数
/*
for(变量类型,变量名=开始值;变量名<=结束值;变量名+=累加的次数){
代码
}
*/
//还可以
for(float i=0.5;i<=8.5;i+=0.5){
cout<<"YES";
}
return 0;
}
第八课
/*
陈袁鑫
2024.9.25
第八课累加器
*/
#include <iostream>
using namespace std;
int main()
{
//如果你要求出1+到1000是多少
//那就不得不用累加器了
//代码如下
int s=0;
for(int i=1;i<=1000;i++){
s+=i;
}
cout<<"s的值是:"<<s<<"_____________";
//正如你所见,累加器只是拿一个变量来加,+号在前面讲过
//相当于一个数来加一个,累加器必须要搭配for来用,要么就加100甚至上千次
//s的类型是什么,它加的数就是什么,比如s的类型是double,它就要+小数
return 0;
}
第九课
/*
陈袁鑫
2024.9.25
第九课 查找最值
*/
#include <iostream>
using namespace std;
int main()
{
//如果题目要你找出最值的话,你会怎么办呢
//有些人可能会用排序来写,但是,要求位置的话呢
//这就不得不使用最值方法
//最值只是一个变量而已,但是,他为什么可以做到查找最值呢
//我们来看代码
int ma=0;//最初赋值,可以用INT_MIN,因为你一开始不用最小,之后该怎么求最值呢
int a[9]={0,1,4,2,3,5,7,6,8};//准备求最大值的数组
for(int i=1;i<=n;i++){
if(ma<a[i]){//最大值判断
ma=a[i];
}
}
cout<<"在a数组中的最大值是:"<<ma<<endl;
int mi=INT_MAX;//同上
for(int i=1;i<=9;i++){
if(mi>a[i]){//最小值判断
mi=a[i];
}
}
cout<<"在a数组中的最小值是:"<<mi<<endl;
return 0;
}
第十课
/*
陈袁鑫
2024.9.26
嵌套循环
*/
#include <iostream>
using namespace std;
int main()
{
//嵌套循环一般用于输出图形而被使用,下面的是它的格式
//双重循环格式:
/*
for(循环条件1){
语句1;
for(循环条件2){
语句2;
}
}
*/
//这样可以输出一个二维图形
//因为i负责行,j负责列
//请看下列代码
for(int i=1;i<=8;i++){
for(int j=1;j<=8;j++){
cout<<"*";
}
cout<<endl;
}
/*
这样可以输出一个方阵
就是当i与j的循环次数相等
之后还可以改一下里面的数据
*/
//有双重循环就有多重循环
/*
for(循环条件1){
语句1;
for(循环条件2){
语句2;
for(循环条件3){
语句3;
}
}
}
*/
//这样子就可以输出更复杂的图形了
return 0;
}
第十一课
/*
陈袁鑫
2024.9.26
while循环
*/
#include <iostream>
using namespace std;
int main()
{
//听说过可以统计数字的循环,但你见过
//专门应对数位分离的循环吗❓
//这个循环就是while循环
/*
while(怎样才运行){
代码;
}
*/
/*
for循环一般应用于循环次数已知的情况;
while循环一般应用于循环次数未知的情况;
在一般情况下,这两者是可以相互转化的。
举一个简单较适合用for循环的例子:
求1-100的和。
*/
/*
#include<bits/stdc++.h>
using namespace std;
int main()
{
int sum=0;
for(int i=1;i<=100;i++)
sum += i;
cout<<sum;
return 0;
}
*/
/*
接下来再举一个适用于while循环的例子:
求输入的一个整数各位数字之和。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,sum=0;
cin>>n;
while(n!=0)
{
sum += n%10;
n /= 10;
}
cout<<sum;
return 0;
}
*/
return 0;
}
2级
第一课
/*
陈袁鑫
2024.9.25
二级第一课 一维数组的定义
*/
#include <iostream>
using namespace std;
int main()
{
//数组名代表的不是一个变量,而是一批变量
//因此不能直接读入整个数组,而是要逐个读入数组元素,通常用循环语句来完成这一功能。
int a[110];
//变量类型 变量名[数据范围];
for(int i=1;i<=10;i++){
cin>>a[i];
}
//也可以单独输入
cin>>a[11];
//数组元素的输出通常用循环语句来实现。
for(int i=1;i<=10;i++){
cout<<a[i]<<" ";
}
//当然,也可以单独输出
cout<<a[11];
//一维数组的赋值通常是利用循环语句来实现。
int b[11];
b[1]=0;
//也可以用循环赋值
for(int i=1;i<=10;i++){
b[i]=i;
cout<<b[i]<<endl;
}
//数组下标用于标明某一元素在数组中的位置,它与数组元素一一对应。
//在某个数组中查找满足某个特定条件的数据,可以从数组的第一个至最后一个逐个进行比较。
return 0;
}
第二课
/*
陈袁鑫
2024.9.26
最大最小值
*/
#include <iostream>
using namespace std;
int main()
{
/*
假设一个最大值 maxx=0 ;
maxx 依次跟数组中的元素进行比较;
如果该数组元素大于 maxx ,则将该数组元素值赋值给 maxx ;
maxx 即为该数组中的最大值。
参考代码
#include<bits/stdc++.h>
using namespace std;
int n,x[101];
int maxx=0;//maxx初始值要比任一数组元素的值小
int main()
{
cin>>n; //读入数组元素个数
for(int i=1;i<=n;i++) //数组赋值
cin>>x[i];
for(int i=1;i<=n;i++) //数组元素依序跟maxx比较
if(x[i]>maxx) maxx=x[i];
cout<<maxx; //将最大值输出
return 0;
}
*/
/*
假设一个最大值 maxx=0,并定义一个变量 pos 记录最大值下标;
maxx依次跟数组中的元素进行比较;
如果该数组元素大于 maxx,则将该数组元素值赋值给 maxx ,同时将该元素的下标值赋值给 pos ;
pos 即为该数组中的最大值的下标。
#include<bits/stdc++.h>
using namespace std;
int n,a[105];
int maxx=0,pos;//maxx初始值要比任一数组元素的值小
int main()
{
cin>>n; //读入数组元素个数
for(int i=1;i<=n;i++) //数组赋值
cin>>a[i];
for(int i=1;i<=n;i++) //数组元素依序跟maxx比较
if(a[i]>maxx) maxx=a[i],pos=i; //记录最大值跟最大值的下标
cout<<pos; //将最大值下标输出
return 0;
}
*/
return 0;
}
第三课
/*
陈袁鑫
2024.9.26
数组元素的移动、插入、删除
*/
#include <iostream>
using namespace std;
int main()
{
/*
明明帮助老师按学号顺序把 402 班的数学成绩输入到电脑,完成输完后发现 18 号同学的成绩忘记输入。
使得后面所有同学的成绩都错位了。能不能设计一个程序把这个同学的成绩插入到正确的位置,使得成绩和学号一一对应?
解题思路
从插入位置起所有后面的同学都要向后退一步,先把那个位置空出来,然后就可以插入一个新成员。
元素的移动:数组元素位置发生变化。
例如,将数组中位置2的元素移动到位置1,可以写成:
a[1]=a[2]; //注意此时原位置1的被覆盖。
又如,将a数组中第一个元素移动到数组末尾,其余数据依次往前平移一个位置,可以按如下步骤实现:
把第一个元素的值取出放在一个临时单元temp中。
通过 a[1]=a[2];a[2]=a[3];a[3]=a[4]; ... a[n-1]=a[n] ,实现其余元素前移。
将 temp 值赋给 a[n]。
可以用以下语句实现:
temp=a[1]; //用temp暂存a[1]
for (int i=1;i<=n-1;i++) //2到n位数据前移
a[i]=a[i+1];
a[n]=temp; //把temp存到数据末尾
*/
/*
元素的删除:删除数组中某个特定位置的元素。a[5] 的数据虽然仍然存在,但是删除元素之前 n = 5。
删除后 n = 4,所以 a[5] 的值已经不在被关注,这个值留在数组内并不影响后续的计算了。
可以用以下语句实现:
for (int i=3;i<=4;i++)
a[i]=a[i+1];
因此,可以用以下程序解决明明的问题:
#include<iostream>
using namespace std;
int a[1001];
int main()
{
int n,m;
cin>>n;
for (int i=1;i<=n;i++)
cin>>a[i];
for (int i=n;i>=18;i--)
a[i+1]=a[i]
cin>>m;
a[18]=m;
for (int i=1;i<=n+1;i++)
cout<<a[i]<<" ";
return 0;
}
*/
return 0;
}
第四课
/*
陈袁鑫
2024.9.26
选择排序
*/
#include <iostream>
using namespace std;
int main()
{
/*
今天,数学老师找到了明明,让他把 1000 个学生的数学成绩按从高分到低分输入电脑。
就像我们排队是从高到矮一样,将同一类型的数据按一定顺序(从大到小或从小到大)排列称为排序。排序的算法有很多,其中选择排序是一种较简单的方法。
例如:输入 5 个正整数,把这 5 个数按由大到小的顺序排列。
分析:要把5个数按从大到小顺序排列,则排完后,第一个数最大,第二个数次大,...... 。因此,我们第一步可将第一个位置的数与其后的各个数依次比较。
若发现有数比它大的,则互相交换位置,这样结束后,第一个位置的数就是最大的数。
用1号数据和后面2到5号的数据依次比较,确定 “第一大” 的数据。
-----
| |
20 10 50 40 10
第一次是 1 号和 2 号比较,20 > 10,所以数据不变。
-------
| |
50 10 20 40 10
第二次是 1 号和 3 号比较,20 < 50,所以交换数据。
-----------
| |
50 10 20 40 10
第三次是 1 号和 4 号比较,50 > 40,所以数据不变。
.....
经过多轮比较,最后确定的顺序是:
10 10 20 40 50
这种排序方法叫选择排序:(从大到小)
for (int i=1;i<=n-1;i++) //确定第i个位置的数据
for(int j=i+1;j<=n;j++) //将第i个数与其后所有数比较
if (a[i]<a[j]) //若a[j]比a[i]大,则交换数据
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
*/
return 0;
}
第五课
/*
陈袁鑫
2024.9.26
sort函数
*/
#include <iostream>
using namespace std;
int main()
{
/*
sort函数包含在头文件为 algorithm 的c++标准库中
这里建议用万能头文件:
#include<bits/stdc++.h>
sort函数有三个参数:
第一个是要排序的数组的起始。
第二个是结束的
第三个参数是排序的方法,可以是从大到小也可是从小到大,还可以不写第三个参数,此时默认的排序方法是从小到大排序。
sort函数使用模板:
sort(start,end,排序方法);
排序方法可以不填,这时候用的是该数组数据类型的默认排序方法。
下面就具体使用 sort( ) 函数结合对数组里的十个数进行排序做一个说明:
例一:输入10个整数,从小到大输出。
{
int a[10]={9,6,3,8,5,2,7,4,1,0};
for(int i=0;i<10;i++)
cout<<a[i]<<" ";
cout<<endl;
sort(a,a+10);
for(int i=0;i<10;i++)
cout<<a[i]<<" ";
cout<<endl;
下面是运行结果
输入
9 6 3 8 5 2 7 4 1 0
0 1 2 3 4 5 6 7 8 9
*/
return 0;
}
第六课
/*
陈袁鑫
输出输入函数
*/
#include<bits/stdc++.h>
using namespace std;
//unsigned long long ;
int main(){
//我们学习过的 cin、cout,一般情况下,用来输入、输出数据已经足够了。
//但这种方法电脑的运行效率比较低,尤其是数据量达到 10 万个以上时会超时。
//为了能够更快输入、输出较多的数据,需要使用格式化输入(scanf)和输出函数(printf)。
//格式是
// scanf(格式控制符,变量名);
// printf(格式控制符,变量名);
//例如:scanf("%d",&a);printf("%d",a);它们也有着和cin与cout一样的好处
//同时也可以输出文字
//scanf("%d",a+1); // a+1 是数组元素的第二个元素的地址,所以写 a+1 相当于写 &a[1];
// 漏了写&,会出现 runtime 错误
//long long a;
//scanf("%d",&a);
//变量是 long long 类型,但是 scanf 的第一个参数格式说明说的是 int 类型。
return 0;
}
第七课
/*
陈袁鑫
2024.9.30
模拟算法
*/
#include <iostream>
using namespace std;
int main()
{
//所谓模拟法,就是用计算机模拟某个过程,通过改变数学模型的各种参数,进而观察变更这些参数所引起的过程状态的变化,然后从中得出解答。
//模拟题的算法一般都不太复杂,关键是所有条件都不能遗漏并要把条件分析清楚。
//竞赛题目中一般都会给出输入输出样例,以便检查程序的输入输出格式是否正确
//但这些样例往往会比竞赛时评判所用的测试数据简单,所以你不能满足于通过这些样例。
//还要尽量自拟一些更复杂、更全面的测试数据来检查程序的正确性
//比如下面这道题
/*
小明每天都可以从妈妈那里领到零花钱,第 1 天可以领到 1 块钱,第2天可以领到 2 块钱......,第 i 天可以领到 i 块钱。
//如果小明领到零花钱后,手上的零花钱是 3 的倍数时。
//小明就会将他手上所有零花钱的三分之一存在妈妈那里(假设小明的零花钱从来不花!)。
//K 天的时候小明手上有多少零花钱呢?
*/
//是下面的代码
/*
int k,s;
cin>>k;
for(int i=1;i<=k;i++)
{
s=s+i; //第 i 天的零花钱为i元
if(s%3==0) s=s/3*2; //如果手上的零花钱s为3的倍数,存三分之一在妈妈那,自己留三分之二。
}
cout<<s;
*/
//算法就是运用前面学的知识合并到一起来运用的
return 0;
}
第八课
/*
陈袁鑫
2024.9.30
周期问题.算法知识
*/
#include <iostream>
using namespace std;
int main()
{
//在我们的生活中,有很多按照一定规律反复出现、周而复始不断循环的自然现象或客观事件。
//比如一年中春夏秋冬四季轮回、一周中星期一到星期日7天循环、一天中24个小时不停轮转……像这种带有周期性规律出现的现象。
//我们统称为周期现象。
//在数学及信息学中,我们将带有周期性规律的问题,统称为 周期问题 。
//例如:
/*
有一列数,按 5、6、2、4、5、6、2、4、... 排列,第 n 个是几?前 n 个数的和是多少 ?( n <= 10000 )
int n;
cin>>n;
int a = n/4; //计算有多少个完整的周期
int b = n%4; //最后不够一个完整周期的数字有多少个
cout<< x[b] <<endl;
cout<<a*17 + s[b];
*/
return 0;
}
第九课
/*
陈袁鑫
2024.9.30
简单递推.递推算法概述
*/
#include <iostream>
using namespace std;
int main()
{
//递推”是计算机解题的一种常用法。利用“递推法”解题首先要分析归纳出“递推关系”。
//如经典的斐波那契数列问题,用 f(i) 表示第 i 项的值,则 f(1) = 0 ,f(2) = 。
//在 n>2 时,存在递推关系:f(n) = f(n-1) + f(n-2) 。递推”是计算机解题的一种常用法。
//利用“递推法”解题首先要分析归纳出“递推关系”。如经典的斐波那契数列问题,用 f(i) 表示第 i 项的值。
//则 f(1) = 0 ,f(2) = 1,在 n>2 时,存在递推关系:f(n) = f(n-1) + f(n-2) 。递推”是计算机解题的一种常用法。利用“递推法”解题首先要分析归纳出“递推关系”。如经典的斐波那契数列问题。
//用 f(i) 表示第 i 项的值,则 f(1) = 0 ,f(2) = 1,在 n>2 时,存在递推关系:f(n) = f(n-1) + f(n-2) 。
//顺推和倒推
//顺推,就是从问题的边界条件(初始状态)出发,通过递推关系式依次从前往后递推出问题的解;
//倒推,就是在不知道问题的边界条件(初始状态)下,从问题的最终解(目标状态或某个中间状态)出发,反过来推导问题的初始状态。
// 解决递推问题有三个重点:
//建立正确的递推关系式;
//分析递推关系式的性质;
//根据递推关系式编程求解。
return 0;
}
第十课
/*
陈袁鑫
2024.9.30
简单的枚举.课堂练习1.鸡兔同笼
*/
#include <iostream>
using namespace std;
int main()
{
//枚举的意思就是把所有情况都看一遍
//把所有可能的情况输出一遍
//例如:
/*
鸡兔同笼
鸡兔同笼问题:一个笼子里面有鸡若干只,兔若干只。共有头 50 个,共有腿 160 条。求鸡兔各多少只?
正确答案是20 30
这就是要用双重循环一个一个比较出来的
有时候枚举需要优化一下
不然会超时
实际上枚举最难点在于你要最少循环多少次,才会对,且不超时
有时要n/2,n/2,n*i+1......
所以枚举是相对比较难的
*/
return 0;
}
第十一课
/*
陈袁鑫
2023.9.23
10.10做
下标计数
*/
#include <bits/stdc++.h>
using namespace std;
int main()
{
/*
题目描述
奥林匹克运动是人类社会的一个罕见的杰作,它将体育运动的多种功能发挥得淋漓尽致,影响力远远超出了体育的范畴,在当代世界的政治、经济、哲学、文化、艺术和新闻媒介等诸多方面产生了一系列不容忽视的影响。奥林匹克运动有一句著名的格言:“更快、更高、更强(Citius, Altius, Fortius)”。
迄今为止已经奥运会(夏季)已经举办了 32 届了,在以往的这些盛会中,出现了众多耀眼的体育明星,有人说喜欢菲尔普斯、有人说喜欢博尔特,也有人说喜欢苏炳添...
现在给每个运动员都编上号,然后大家给自己最喜欢的运动员投票,最后通过将得票最多的推选为最受欢迎的奥运之星。
因为全球人数太多了,候选人也非常多,通过人力来统计非常麻烦,请你编写程序帮助将奥运之星统计出来,你能做到吗?
输入格式
第一行只有一个数:N ( 1 ≤ N ≤ 500000 ),表示参加投票的人数。
第二行有 N 个正整数,相邻数用空格隔开,所有数均不超过 100000 ,表示这 n 个人的投票情况。
输出格式
得票最多的那个数,如果有相同得票的,则输出数值较小的那个数。
*/
//上面是一道例题
//它让我们统计所有人的票数
//下面是它的正确代码:
long long n,a[500010],t,ma=INT_MIN,l;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>t;
a[t]++;//下标计数,统计次数
}
for(int i=1;i<=500000;i++){
if(a[i]>ma){//因为不确定在那,所以全部都便利一遍
ma=a[i];
l=i;
}
}
cout<<l;
return 0;
}
return 0;
}
第十二课
/*
陈袁鑫
2023.9.23
10.10做
求连续相同的一段数
*/
#include <bits/stdc++.h>
using namespace std;
int main()
{
/*
题目描述
FJ 的农场举行了异一场 USA 奶牛奥林匹克竞赛。N ( 1 <= N <= 100,000 ; N 是一个奇数 ) 只奶牛都已经获得了一个整数分数 S ( 0 <= S <= 10,000 )。
FJ 必须统计这些分数以便指导他们。帮帮他吧~~给出一个列表,计算最小值、最大值、中间数、众数。中间值是一个值 M ,至少一半的数 <= M ,至少一半的数 >= M 。众数是指出现次数最多的一个数。FJ 知道分数里面只有一个众数。
输入格式
第 1 行:一个整数 N 。
第 2 ~ N+1 行:每一行有一个整数,是一只奶牛的分数。
输出格式
四个用空格隔开的整数:最小值、最大值、中间数、众数。
*/
//上面是一道例题
//它让我们统计所有人的票数
//下面是它的正确代码:
long long n,a[500010];
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
int ma=-1,mi=1000000010,cnt=1,cnt1,ans=0;
for(int i=1;i<=n;i++){
if(a[i]>=ma) ma=a[i];
if(a[i]<=mi) mi=a[i];
if(i>1){
if(a[i]==a[i-1]) cnt++;
}
else {
if(cnt>=cnt1)cnt1=cnt,ans=a[i];
cnt=1;
}
}
cout<<mi<<" "<<ma<<" ";
if(n%2==0) cout<<a[n/2+1]<<" ";
else cout<<(a[n/2]+a[n/2+1])/2<<" ";
cout<<ans<<" ";
return 0;
}
3级
第一课
#include <bits/stdc++.h>
using namespace std;
//unsigned long long ;
void t(string ss){
cout<<"——————————————————"<<ss<<"——————————————————"<<endl;
}
void hws(){
t("判断回文数");
int n,m;
cin>>n>>m;
int s=0,s1=0;
while(n!=0){
s=s*10+n%10;
n/=10;
}
while(m!=0){
s1=s1*10+m%10;
m/=10;
}
if(s==n) cout<<"n是回文数"<<endl;
else cout<<"n不是回文数"<<endl;
if(s1==m) cout<<"m是回文数"<<endl;
else cout<<"m不是回文数"<<endl;
}
void hwspdyzxs(){
t("回文数的一种组成形式");
int n;
cin>>n;
int s=0;
while(n!=0){
s=s*10+n%10;
n/=10;
}
if(s==n){
cout<<"当n是回文数时,他加上他的倒叙数,也是一个回文数,他是:"<<s+n<<endl;;
}
else cout<<"n不是回文数"<<endl;
}
int main(){
hws();
hwspdyzxs();
return 0;
}
第六课
/*
陈袁鑫
2024.9.30
字符串的定义,输出,输入与运用等等等等;
*/
#include <bits/stdc++.h>
using namespace std;
void t(string ss){
cout<<"----------"<<ss<<"----------"<<endl;
}
void dingyiyufuzhi(){
t("先定义");
char c='a';
char c1='b';
cout<<"字符c的值是:"<<c<<endl;
cout<<"字符c1的值是:"<<c1<<endl;
char c3[101]={'0','a','\0'};//字符数组也是和数组是一样的,赋值也和它一样
//后面记得要加\0,不然他会一直输出上一个(只会输出一次)
cout<<"c3数组里存的值是:"<<c3[0]<<" "<<c3[1]<<endl;
}
void shuru(){
t("输入");
char a1,a2,a3;
cin>>a1;
scanf("%c",&a2);
a3=getchar();//这里也可以表示输入,上一个是换行符
//注意 字符有着独特的scanf输入
//他们代表的输入是%c
cout<<"字符a1里输入的数是:"<<a1<<endl;
cout<<"字符a2里输入的数是:"<<a2<<endl;
cout<<"字符a3里输入的数是:"<<a3<<endl;
}
void shuchu(){
t("输出");
char b1,b2;
//字符的输出可以是cout
//也可以用2级内容:printf
b1='#';
b2='@';
cout<<"b1里赋值的字符是:"<<b1<<endl;
printf("b2里赋值的字符是:%c\n",b2);
}
void yushuzuzhijiandeguanzi(){
t("与数字之间的关系");
//每一个字符都有一个对应的ASCLL码值
//比如:
char c=97;
cout<<"c字符对应的字符是:"<<c<<endl;
char b=c+1;
cout<<"b字符对应的字符是:"<<b<<endl;
}
int main()
{
dingyiyufuzhi();
shuru();
shuchu();
yushuzuzhijiandeguanzi();
return 0;
}
4级
5级
6级
7级
第六课
/*
陈袁鑫
2023.9.23
10.14做
C07.L06.STL之动态数组.概述
*/
#include <bits/stdc++.h>
using namespace std;
void t(string ss){
cout<<"————————————————"<<ss<<"——————————————————"<<endl;
}
void dingyi(){
t("定义");
//头文件要用 #include<vector> ( 用万能头文件也可以)
vector<int> dc;
cout<<"vector<数据类型> 变量名"<<endl;
}
void shuruandshuchu(){
t("输入&输出");
vector<int> dc;
int x,y,z;
cin>>x>>y>>z;
dc.push_back(x);
dc.push_back(y);
dc.push_back(z);
cout<<"dc[0]="<<dc[0]<<endl;
}
void shuchuchangdu(){
t("输出长度&清空&判空");
vector<int> dc;
dc.push_back(1);
dc.push_back(2);
dc.push_back(3);
dc.push_back(4);
dc.push_back(5);
dc.push_back(6);
dc.push_back(7);
dc.push_back(8);
dc.push_back(9);
cout<<"dc的长度是"<<dc.size()<<endl;
dc.clear();
cout<<"dc现在是否为空"<<dc.empty()<<endl;
}
int main()
{
dingyi();
shuruandshuchu();
shuchuchangdu();
return 0;
}
第九课
/*
陈袁鑫
2023.9.23
10.10做
栈的应用
*/
#include <bits/stdc++.h>
using namespace std;
void t(string ss){
cout<<"————————————————"<<ss<<"——————————————————"<<endl;
}
void dingyi(){
t("定义");
cout<<"栈的格式:stack<数据类型>栈名"<<endl;
}
void ruzhanyuchuzhan(){
t("入栈与出栈");
stack<int>s;
int a,b;
cin>>a>>b;
s.push(a);
s.push(b);
cout<<"将栈顶元素出栈,元素是:"<<s.top()<<endl;
s.pop();
cout<<"出栈后的栈顶元素是:"<<s.top()<<endl;
}
void qingkong(){
t("清空");
stack<int>s;
s.push(5);
cout<<"输出栈是否为空:"<<s.empty()<<endl;
s.pop();
cout<<"输出栈是否为空:"<<s.empty()<<endl;
}
void fangwenchangdu(){
t("访问长度");
stack<int> s;
s.push(5);
cout<<"s的长度为:"<<s.size()<<endl;
}
void bianli(){
t("遍历");
stack<int> s;
for(int i=1;i<=5;i++){
int t;
cin>>t;
s.push(t);
}
cout<<"输出入栈的元素"<<endl;
while(!s.empty()){
cout<<s.top()<<" ";
s.pop();
}
}
int main()
{
dingyi();
ruzhanyuchuzhan();
qingkong();
fangwenchangdu();
bianli();
return 0;
}
第十课
双向队列
/*
陈袁鑫
2023.9.23
10.10做
栈的应用
*/
#include <bits/stdc++.h>
using namespace std;
void t(string ss){
cout<<"————————————————"<<ss<<"——————————————————"<<endl;
}
void dingyi(){
t("定义");
cout<<"队列的格式:deque<数据类型>队列名"<<endl;
}
void ruzhanyuchuzhan(){
t("入队列与队列");
deque<int>s;
int a,b;
cin>>a>>b;
s.push_front(a);
s.push_back(b);
cout<<"将队列顶元素出队列,元素是:"<<s.front()<<endl;
s.pop_front();
cout<<"出队列后的队列顶元素是:"<<s.front()<<endl;
}
void qingkong(){
t("清空");
deque<int>s;
s.push_front(5);
cout<<"输出队列是否为空:"<<s.empty()<<endl;
s.pop_front();
cout<<"输出队列是否为空:"<<s.empty()<<endl;
}
void fangwenchangdu(){
t("访问长度");
deque<int> s;
s.push_front(5);
cout<<"s的长度为:"<<s.size()<<endl;
}
void bianli(){
t("遍历");
deque<int> s;
for(int i=1;i<=5;i++){
int t;
cin>>t;
s.push_front(t);
}
cout<<"输出入队列的元素"<<endl;
while(!s.empty()){
cout<<s.front()<<" ";
s.pop_front();
}
}
int main()
{
dingyi();
ruzhanyuchuzhan();
qingkong();
fangwenchangdu();
bianli();
return 0;
}