排序:本质就是反复交换
1. 交换
//cclass temp = a; class temp = b;a = b; b = a;b = temp; a = temp;//c++#include <algorithm>swap(a,b);
2. 最值,平均
最值
min = INF, max = -INF;- min = max = a[0];
#define INF 100000int min = INF, max = -INF;//int min = max = a[0];if(min>x) min = x;if(max<x) max = x;
- 平均:
double sum
double sum = 0;int cnt = 0;for()sum += ...cout << sum/cnt;
eg2-5 数据统计
输入一些整数,求出他们的最小值,最大值和平均值(保留三位小数),输入的数小于1000
输入包含多组数据,每组数据的第一行是整数个数n,第二行是n个整数,n=0为输入结束标记,程序应当忽略这组数据,相邻两组数据之间应输出一个空行输入: 8
2 8 3 5 1 7 3 6
4
-4 6 10 0
0
输出 1 8 4.375
-4 10 3.000每次运算后的数据都要进行重置,即每一轮后min,max,sum,cnt都需要被重置
#define INF 100000int main(){int num;//&&num ==> num为0时退出while(scanf("%d", &num) && num){ //读入num,且num为0时退出int min = INF, max = -INF;int n;double sum = 0;int cnt = 0;for(int i=0; i<num; i++){scanf("%d", &n);if(min>n) min = n;if(max<n) max = n;sum += n;cnt++;}printf("%d %d %.3f\n", min, max, sum/cnt);}return 0;}
3. 排序
- 选择排序
- 冒泡排序
- 插入排序
int a, b, c;cin >> a >> b >> c;//插入排序(摸牌) 找到位置后交换(每轮只交换一次)(但也可以通过不断交换来实现)//冒泡排序 ==> 最后一个值是最大值 比我小就交换(每轮会交换很多次)if(a>b) swap(a,b);if(b>c) swap(b,c);if(a>b) swap(a,b);cout << a << " " << b << " " << c << endl;//选择排序 ==> 第一个值是最小值 找到最小值后交换(每轮只交换一次)
~是按位取反
scanf的返回值是输入值的个数
如果没有输入值就是返回-1
-1按位取反结果是0
while(~scanf(“%d”, &n))就是当没有输入的时候退出循环
=======================================
范围问题
- 3n+1
- 阶乘的和 (*)
