讲座2-一维数组查找统计、应用举例
合集下载
8.4 一维数组应用举例_C语言程序设计_[共2页]
![8.4 一维数组应用举例_C语言程序设计_[共2页]](https://img.taocdn.com/s3/m/7575c9c64431b90d6d85c742.png)
函数 fun( )的函数体重定义了一个 b 数组,在调用 fun( )函数时,系统为它开辟一串连续的元 素,b 是一个地址常量,不可对它重新赋值。虽然 a 和 b 有相同的说明形式,它们一个是作为形 参的指针,一个是函数体内定义的数组,具有完全不同的含义。
在函数 fun( )执行完毕,返回主函数时,系统释放 a 和 b 所占存储单元,指针变量 a 和数组 b 将不再存在。因此,函数 fun( )不应把 b 的值作为返回值,这样做,主函数中的指针变量 p 将不 指向任何对象而成为“无向指针”。
8.4 一维数组应用举例
【例 8-9】从键盘输入 10 个数,用起dio.h> int main() {
int a[10];
int i,j,tem;
for(i=0;i<=9;i++)
{
printf("请输入第%d 个数:",i+1);
scanf("%d",&a[i]);
}
for(i=9;i>0;i--)
//请注意这句!
for(j=0;j<i;j++)
if(a[j]>a[j+1])
{ tem=a[j];
a[j]=a[j+1];
189
第 8 章 数组
b 数组的开头。
#include<stdio.h> #define N 10 int *fun(int a[N],int n) {
int b[N]; return b; } void main() { int w[N]; p=fun(w,N); }
以上程序涉及几个概念。
在函数 fun( )中,形参 a 在形式上写作为 a[N],实际上它也可以写作 a[]或*a。但无论写成哪 种形式,C 编译程序都将其作为一个指针处理。在调用 fun 函数时,系统只为形参 a 开辟了存储 单元,并把 main( )函数中 w 数组的起始地址存入其中,使它指向 w 数组的首地址。因此,在 fun( ) 函数中,凡是指针变量可以参与运算,形式指针 a 同样可以参与,如可以进行 a++的操作,使它 移动去指向 w 数组的其他元素,还可以通过赋值语句使它不再指向 w 数组的元素。
在函数 fun( )执行完毕,返回主函数时,系统释放 a 和 b 所占存储单元,指针变量 a 和数组 b 将不再存在。因此,函数 fun( )不应把 b 的值作为返回值,这样做,主函数中的指针变量 p 将不 指向任何对象而成为“无向指针”。
8.4 一维数组应用举例
【例 8-9】从键盘输入 10 个数,用起dio.h> int main() {
int a[10];
int i,j,tem;
for(i=0;i<=9;i++)
{
printf("请输入第%d 个数:",i+1);
scanf("%d",&a[i]);
}
for(i=9;i>0;i--)
//请注意这句!
for(j=0;j<i;j++)
if(a[j]>a[j+1])
{ tem=a[j];
a[j]=a[j+1];
189
第 8 章 数组
b 数组的开头。
#include<stdio.h> #define N 10 int *fun(int a[N],int n) {
int b[N]; return b; } void main() { int w[N]; p=fun(w,N); }
以上程序涉及几个概念。
在函数 fun( )中,形参 a 在形式上写作为 a[N],实际上它也可以写作 a[]或*a。但无论写成哪 种形式,C 编译程序都将其作为一个指针处理。在调用 fun 函数时,系统只为形参 a 开辟了存储 单元,并把 main( )函数中 w 数组的起始地址存入其中,使它指向 w 数组的首地址。因此,在 fun( ) 函数中,凡是指针变量可以参与运算,形式指针 a 同样可以参与,如可以进行 a++的操作,使它 移动去指向 w 数组的其他元素,还可以通过赋值语句使它不再指向 w 数组的元素。
一维数组(C语言)ppt课件

printf(“\n〞);
}
B、运用getchar putchar getch getche函数。
字符数组
〔2〕将整个字符串一次输入或输出。用%s格式符。 例:char c[ ]=“china〞; printf(“%s〞,c);
结果为:china
留意: A、输出字符不包括终了符‘\0’; B、用%s格式符输出字符串时,printf 函数中的输出项是字
printf(“请输入数字字符串:〞); Scanf(“%s〞,str);
strlen(str)
main( ) {
insert(str)
char str[10]; scanf(“请输入
数字字符串:%s\n〞,&str);
insert(str);
}
char str[ ]; { int i1;
for(i1=strlen(str[10]);i1>0; i1--) {
一维数组
4、数组元素的初始化 普通方式为:
类型名 数组名[整型常量表达式]={常量1,常量2,…}
例:int a[10]={1,2,3,4,5,6,7,8,9,10}; 该语句定义了一个动态数组,并对该动态数组进展了初始化。
留意: 1、所赋初值的类型必需与阐明的类型一致。 2、在指定初值时,第一个值赋给下标为0的元素。 3、不能够跳过前面的元素给后面的元素赋初值。
scanf(" %d",&a[i]); printf(" \nyou input is :"); for (i=0;i<10;i++) printf(" %d, ",&a[i]); }
一维数组
一维数组的定义,赋值,遍历PPT教学课件

一维数组
2020/12/09
1
主要内容
• 一维数组的定义 • 一维数组元素的引用 • 一维数组的初始化和赋值
• 一维数组的遍历
• 一维数组元素的查找 • 一维数组元素的排序
2020/12/09
2
一维数组的定义
2020/12/09
3
一维数组的定义
• 定义数组的语法: int a[10]; 数据类型说明符 数组名[数组长度];
2020/12/09
15
例题:从键盘输入10个整数存放在数组中,
找出其中最大的一个数,输出该最大数。
解法1:记下最大数其值 main() {
int i, max,a[10]; printf("enter data:\n"); for(i=0;i<10;i++) scanf("%d", &a[i]); max=a[0]; //假定a[0]的元素最大 for(i=1;i<10;i++)
if(a[i]>max) max=a[i];
printf(“最大数是%d\n", max); }
2020/12/09
解法2:记下最大数相应的下标 main() {
int i, max_id,a[10]; printf("enter data:\n"); for(i=0;i<10;i++) scanf("%d", &a[i]); max_id=0; //假定下标为0的元素最大 for(i=1;i<10;i++)
(3)不能对整个数组初始化; int data[5]=1; 错误,应为: int data[5]={1,1,1,1,1};
2020/12/09
1
主要内容
• 一维数组的定义 • 一维数组元素的引用 • 一维数组的初始化和赋值
• 一维数组的遍历
• 一维数组元素的查找 • 一维数组元素的排序
2020/12/09
2
一维数组的定义
2020/12/09
3
一维数组的定义
• 定义数组的语法: int a[10]; 数据类型说明符 数组名[数组长度];
2020/12/09
15
例题:从键盘输入10个整数存放在数组中,
找出其中最大的一个数,输出该最大数。
解法1:记下最大数其值 main() {
int i, max,a[10]; printf("enter data:\n"); for(i=0;i<10;i++) scanf("%d", &a[i]); max=a[0]; //假定a[0]的元素最大 for(i=1;i<10;i++)
if(a[i]>max) max=a[i];
printf(“最大数是%d\n", max); }
2020/12/09
解法2:记下最大数相应的下标 main() {
int i, max_id,a[10]; printf("enter data:\n"); for(i=0;i<10;i++) scanf("%d", &a[i]); max_id=0; //假定下标为0的元素最大 for(i=1;i<10;i++)
(3)不能对整个数组初始化; int data[5]=1; 错误,应为: int data[5]={1,1,1,1,1};
《一维搜索方法》课件

1
原理
根据斐波那契数列生成黄金分割比例,用于确定搜索范围的分割点。
2
思路
根据斐波那契数列的值,确定左右指针在搜索范围内的位置,直到找到最接近目 标值的点。
3
优缺点
迭代次数逐渐趋近于黄金分割点,但对搜索范围要求较高。
黄金分割法搜索方法的原理和思路
1
原理
将搜索范围按黄金分割点分割,选择较小的一部分作为新的搜索范围。
2
思路
通过反复按黄金分割点计算和调整搜索范围,逐步逼近最接近目标值的点。
3
优缺点
迭代次数相对较少,但需要较复杂的计算公式。
三分搜索方法的原理和思路
1
原理
将搜索范围分割为三等份,并判断目标值位于左、中、右三个部分,逐步缩小搜索范 围。
2
思路
根据目标值与分割点的大小关系,决定下一步搜索的范围,直到找到最接近目标值的 点。
3
优缺点
对于非单调函数,能更快地找到目标值,但需要较多的判断。
多点搜索方法的原理和思路
1
原理
同时使用多个起始点进行搜索,通过不断比较找到最接近目标值的点。
2
思路
根据多个起始点的初始值和搜索步长,逐步调整并比较得到最优解。
3
优缺点
相比于单点搜索,能更准确地找到目标值,但需要同时处理多个起始点的迭代。
2
思路
从起始点开始,依次向右增加或向左减小搜索范围,直到找到最接近目标值的点。
3
优缺点
简单易懂,但需要较多的迭代次数。
二分搜索方法的原理和思路
1
原理
将搜索范围一分为二,并判断目标值位于左半部分还是右半部分,逐步缩小搜索 范围。
2
思路
第十讲+一维数组与查询统计

关键程序段:
int c[11]={0}; for (j=1;j<=20;j++) { scanf(“%d”, &s); //输入成 绩 k=s/10; //整除 c[k]=c[k]+1; //累加
五、分段统计
[例6] 输入20名学生一门课的考试成绩,然后统计出0~9, 10~19, 20~29,…., 80~89, 90~99, 100 各分数段的人数。
重点:统计有关算法 难点:插入排序法
一、顺序查找法
假设数组a[0]、a[1]、…、a[N-1]中保存有N个数据,从中 查找一个数据F。若F在数组a中存在,则显示元素下标; 若不存在,显示不存在信息。 顺序查找法:
从数组第1个元素依次向后与要找的数据F比较;若相同,则查找结 束;若不相同,则继续查找,直至数组最后一个元素。若所有元素均 不等于F,则说明F不在数组a中。
如果F>a[k] a[k] 如果F<a[k] a[k]
a[0] a[1]
a[k]
a[N-1]
b
k
b
k
e
k
ห้องสมุดไป่ตู้
e
二、二分查找法
[例2]随机产生100个0~99的随机整数存于数组中, 升序排序后显示于屏 幕上。然后从键盘输入一个数,用二分法查找其在数组中的位置。
随机产生100个100以内的整数并存于数组a中 把数组a中的数按升级排序 把数组a中的数按下标次序显示 死循环 等待从键盘输入要找的数存于F F<0 是 break b=0; e=99; found=0; k=b+(e-b)/2 a[k]==F 否 是 a[k]<F 是 found=1; b=k+1 b<=e found==0 break; 是 显示元素下标
专题5 一维数组和二维数组的概念及基本应用

A) 3
B) 6
C) 10
D) 20 D
5.有以下程序 [08年4月]
main()
{ int s[12]={1,2,3,4,4,3,2,1,1,1,2,3},c[5]={0},i;
for(i=0;i<12;i++) c[s[i]]++;
for(i=1;i<5;i++) printf(“%d”,c[i]);
if(a[j]<a[k]) k=j; t=a[k];a[k]=a[i];a[i]=t; } printf(“排序结果为:\n”); for(k=0;k<6;k++) printf(“%d”,a[k]); }
例2 用交换排序法对数据升序排序,请填空 #inlcude<stdio.h> main() { int a[5]={4,6,1,3,9} i, t; for(i=0;i<5;i++)
for(j=0;j<4-i;j++) if(a[j]>a[j+1]) {t=a[j]; a[j]=a[j+1]; a[j+1]=t; }
printf(“排序结果为:\n”); for(i=0;i<5;i++)
printf(“%d”,a[i]);}
假设有5个数
98888 89666 66944 44493 33339
1 一维数组
数组是c语言中一种最简单的构造类型,每个定义好的数组包含一组同一 类型的变量,这些变量在内存中占有连续的存储单元,在程序中这些变量具 有相同的名字,但具有不同的下标,数组要先定义后使用。
1.1 一维数组定义的一般形式
C++ 一维数组的使用

概念
数组的维数
这批类型相同的数据在排列上会有各种形式,比如排成一行 ,排成一片(矩阵),或者一堆(立方体),数组不仅要通过 下标区分它们,还要描述出位置信息,这可以通过定义数组 的维数来进行。 一维数组用于描述一行或者一列数据
数列 75 一维数组 a[0] a[1] a[2] a[3] a[4] a[5] 78 83 72 69 63
当采用定义时就赋值这种初始化形式时,数组长度应不小于初始化数据个数 ,否则编译出错。 比如 int a[2]={1,2,3,4}; 是错误的
一维数组
数组元素的输入输出
只能通过对每个元素进行操作来完成数据的输入、访问和输出 通常用循环结构来完成对每个元素的操作,循环控制变量既控制循环,又作 为数组元素的下标来使用。 int a[5]; 下面三种方式都可以实现对每个元素的访问 输入: for(int i=0;i<=4;i++) cin>>a[i]; 访问: for(int i=0;i<5;i++) sum+=a[i]; 输出: for(int i=1;i<=5;i++) cout<<a[i-1]; 循环控制变量 i 既控制循 环次数,也代表当前操作 元素的下标,所以习惯从0 开始,到最后一个元素的 下标结束。
一维数组
一维数组的应用
逆序 求最大(小)值 排序 比较互换法、选择法、冒泡法 插入(删除) 查找 一般查找、对分查找
一维数组的应用
将一个整数序列的数据对半交换并输出
对半交换,即第一个和最后一个呼唤,第二个和倒数第二个呼唤,依次类推,直到所有数据都完 成位置移动。 关键: 如果数据为n个,则只要执行 n/2 次交换过程即可,否则就又被换回来了。 int a[10]={1,2,3,4,5,6,7,8,9,10}; cout << "原始序列:"; for(int i=0;i<=9;i++) { cout << a[i]<<" "; } for(i=0;i<=10/2-1;i++) { int t=a[i]; a[i]=a[10-1-i]; a[10-1-i]=t; } cout << "交换后序列:"; for(i=0;i<=9;i++) { cout << a[i]<<" "; }
一维数组,二维数组演示课件

int n; scanf(“%d”,&n); int a[n];
12
6.2.2 引用一维数组的元素
➢ 必须先定义数组,才能引用数组中的元素 ➢ t=a[3],将a数组中序号为3的元素的值赋给变量t。 ➢ 只能逐个引用数组元素而不能一次引用整个数组中的
全部元素。 b=a[2];c=a[5]; printf(“%d,%d,%d,%d,%d,%d\n”,a);
16
#include <stdio.h> void main() { int i,a[10];
for(i=0;i<=9;i++) a[i]=i;
for(i=9;i>=0; i--) printf("%d ",a[i]);
printf("\n"); }
使a[0]~a[9]的值 为0~9
先输出a[9],最后输 出a[0]
6.2.1 定义一维数组 6.2.2 引用一维数组的元素 6.2.3 一维数组的初始化 6.2.4 一维数组程序举例
8
6.2.1 定义一维数组
一维数组是最简单的数组。
数组元素只有1个下标—一维数组,s[5],相当于“线”。 数组元素有2个下标—二维数组,s[1][2],相当于 “面”。 数组元素有3个下标—三维数组,s[2][4][3],相当于 “体”。
448 2 2
a[3]
222 8 0
a[4]
000 0 8
a[5]
999 9 9
27
for(i=0;i<3;i++) if (a[i]>a[i+1]) { t=a[i];a[i]=a[i+1];a[i+1]=t; }
12
6.2.2 引用一维数组的元素
➢ 必须先定义数组,才能引用数组中的元素 ➢ t=a[3],将a数组中序号为3的元素的值赋给变量t。 ➢ 只能逐个引用数组元素而不能一次引用整个数组中的
全部元素。 b=a[2];c=a[5]; printf(“%d,%d,%d,%d,%d,%d\n”,a);
16
#include <stdio.h> void main() { int i,a[10];
for(i=0;i<=9;i++) a[i]=i;
for(i=9;i>=0; i--) printf("%d ",a[i]);
printf("\n"); }
使a[0]~a[9]的值 为0~9
先输出a[9],最后输 出a[0]
6.2.1 定义一维数组 6.2.2 引用一维数组的元素 6.2.3 一维数组的初始化 6.2.4 一维数组程序举例
8
6.2.1 定义一维数组
一维数组是最简单的数组。
数组元素只有1个下标—一维数组,s[5],相当于“线”。 数组元素有2个下标—二维数组,s[1][2],相当于 “面”。 数组元素有3个下标—三维数组,s[2][4][3],相当于 “体”。
448 2 2
a[3]
222 8 0
a[4]
000 0 8
a[5]
999 9 9
27
for(i=0;i<3;i++) if (a[i]>a[i+1]) { t=a[i];a[i]=a[i+1];a[i+1]=t; }
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、查找元素
JSOI2018江苏省信息学奥林匹克冬令营
例题1:查找x(1)
给定一列数组,在数组中查找数据x,如果x存在于数组中,则输出x的
位置,否则输出-1。
例题分析: 本题采用枚举法,从数组的第一个元素开始逐一比较,查找当前元素是否和x相同, 如果相同,则记录当前元素的位置并退出循环,直至循环结束。方便起见,可以将
3、其他应用
JSOI2018江苏省信息学奥林匹克冬令营
例题9:猴子选大王
例题分析:
有了数组工具,我们可以使用数组来模拟猴子选大王的过程。定义一个含m个元素的数 组monkey来记录猴子的状态。用元素下标代表猴子的编号,元素的值表示猴子的状态:
monkey[k]=0表示第k只猴子仍在圈中;monkey[k]=1则表示第k只猴子已经出圈。
位置的初始值记为-1。这种从头开始,逐一枚举的查找方法称为顺序查找法。
1、查找元素
JSOI2018江苏省信息学奥林匹克冬令营
例题2:查找x(2)
给定一列数组,在数组中查找数据x,如果x存在于数组中,则输出x的
个数,否则输出0。
例题分析: 本题和上题的区别在于数组中可能存在多个x,这时候不管有没有找到x,都需要将 数组完整地扫描一遍。初始时,记x的个数s为0,每找到一个x,则s++,扫描完毕
次数 1 2 3 4 5 6 7 8 9 10
猜数
提示
500
小
750
大
625
大
562
大
531
大
516
大
508
大
504
大
502
小
503
大
1、查找元素
JSOI2018江苏省信息学奥林匹克冬令营
二分查找
如果待查找的元素是有序的,一般我们采用二分查找法来查找元素。
二分查找又称折半查找,其基本思想是:
1. 将n个元素分成大致相等的两部分,取a[n/2]与x做比较; 2. 如果x=a[n/2],则找到x,算法中止; 3. 如果x<a[n/2],则只要在数组a的左半部分查找x; 4. 如果x>a[n/2],则只要在数组a的右半部分查找x。
//如果left=right,表示没有找到。
//记住:right所在的位置是取不到的!
1、查找元素
JSOI2018江苏省信息学奥林匹克冬令营
二分查找的平均查找长度
已知一个有序表为(13 18 24 35 47 50 62 83 90 155 134),当用
二分法查找算法进行元素搜索时,成功的平均查找长度是多少?
3、其他应用
JSOI2018江苏省信息学奥林匹克冬令营
例题8:求1~N之间的质数
输入格式:一个数n(1<n<1000000)
输出格式:以空格隔开的素数 输入样例:10 输出样例:2 3 5 7
例题分析: 判断一个数是否为素数一般用循环结构解决。求范围内的素数可以枚举范围内的每一个
数,判断它是否为素数。还有没有更高效的做法?
1、查找元素
JSOI2018江苏省信息学奥林匹克冬令营
例题3:找出第二小的数(NOIP2014提高组初赛)
if (S[1] < S[2]) FirstMin = S[1], SecondMin = S[2]; else FirstMin = S[2], SecondMin = S[1]; 在最坏情况下,该算法需要做
50
3、其他应用
JSOI2018江苏省信息学奥林匹克冬令营
例题8:求1~N之间的质数
算法设计: 1. 初始化数组a的元素值都为0, 假设它们都是素数; 2. a[1]=0,1既不是素数,也不是合数; 3. 循环枚举2~sqrt(n)+1,如果当前的数没有被删除,它就是素数;如果当前数是素 数,则删除该素数的所有<=n的倍数,即令a[i]=1; 4. 循环枚举2~n,输出所有值为零的元素下标。
JSOI2018江苏省信息学奥林匹克冬令营
例题9:猴子选大王
M只猴子要选大王,选举办法如下:所有猴子按1…M编号围坐一圈,
从第1号开始按顺序1,2,…,N报数,凡报到N的猴子退出到圈外,如 此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王。M和N由 键盘输入,打印出最后剩下的那只猴子的编号。
输入样例:8 3 输出样例:7
第二讲 数组应用
目录
JSOI2018江苏省信息学奥林匹克冬令营
1、查找元素
2、数值统计 3、其他应用
1、查找元素
JSOI2018江苏省信息学奥林匹克冬令营
查找元素
在一列数组元素中按要求查找元素是数组应用中的基本操作,也是很
多较复杂题的重要组成部分。按照题目要求的不同,查找可以分为各
种不同种类,这里主要解决两类查找问题: 1. 查找确定的元素 2. 查找最大的元素
目录
JSOI2018江苏省信息学奥林匹克冬令营
1、查找元素
2、数据统计 3、其他应用
2、数据统计
JSOI2018江苏省信息学奥林匹克冬令营
数据统计
统计学是一门收集、处理、分析、解释数据并从数据中得出结论
的科学。常见的统计方式包括求总数、求平均数、求中位数、求众数
等。由于参与统计的数据通常比较多,所以数组是统计类题目里不可 或缺的工具。
(2) 求考试成绩平均分,并输出; (3) 枚举学生成绩,输出高于平均分的学生学号和成绩。
2、数据统计
JSOI2018江苏省信息学奥林匹克冬令营
例题5:求众数
所谓众数,就是是一组数据中出现次数最多的数,比如,3 3 4 4 4 5 6 6 8 8 9 这
列数中,众数就是4。有时候,在一组数中有好几个众数。
分析:可以画一个表格模拟查找的过程。
下标 数值
0 13
4
1 18
3
2 24
2
3 35
4
4 47
3
5 50
1
6 62
4
7 83
3
8 90
2
9 10 155 134
4 3
查找
所以,总的查找次数是 1*1+2*2+3*4+4*4=33, 平均查找长度是 33/11。
1、查找元素
JSOI2018江苏省信息学奥林匹克冬令营
JSOI2018江苏省信息学奥林匹克冬令营
p=0; for (int i=1; i<=m-1; i++) { while (k<n) { p++; if (p>n) p=1; if (a[p]==0) k++; } a[p]=1; k=0; }
ASL=∑Ki / n = ((1+n)*n/2)/n = (1+n)/2
1、查找元素
JSOI2018江苏省信息学奥林匹克冬令营
讨论:猜数
这是一个猜数游戏,一位同学默想一个小于1000的正整数,让另一个
同学去猜,然后给出大或者小的提示,采取什么样的策略才能让猜的
次数尽量少呢?
一般我们会采用二分的策略,假如要猜得的数是503,猜数过程如下:
3、其他应用
JSOI2018江苏省信息学奥林匹克冬令营
例题8:求1~N之间的质数
参考程序段: memset(a, sizeof(a), 0); for (int i=2; i*i<=n; i++) if (a[i]==0) for (int j=2; i*j<=n; j++) a[i*j]=1;
3、其他应用
5. 回到1,在新的区域里查找x。
1、查找元素
JSOI2018江苏省信息学奥林匹克冬令营
参考程序段
left=1; right=1000; k=0; while (left<right) { mid=(left+right)/2; k=++k; if (mid==x) break; else if (mid>x) right=mid; else left=mid+1; } cout<<k; //这里采取左闭右开的写法,即右边的数不在范围内
程序采用模拟的方法,开始时设置报数变量k的值为0,当前报数猴子的编号变量p的初 值也置为0,如果当前猴子在圈中,则报数,当报数达到n时,对当前报数的猴子作出圈
处理,即monkey[p]置1,同时k清0,然后进行下一轮报数。报数过程循环m-1次,删
除m-1只猴子后,剩下的那只猴子就是选出的大王。
3、其他应用
目录
JSOI2018江苏省信息学奥林匹克冬令营
1、查找元素
2、数值统计 3、其他应用
3、其他应用
JSOI2018江苏省信息学奥林匹克冬令营
例题6:转换二进制
众所周知,整数的十进制转换成二进制采用的是“除2取余,按权展开,
倒序排列”的方法。现给出一个十进制数,保证它在整数(integer) 范围内,请你将它转换成二进制数。
(
A. 2n
)次比较。
for (i = 3; i <=n; i++) if (S[1] < SecondMin) if (S[1] < FirstMin) SecondMin = FirstMin ,FirstMin = S[1] ; else SecondMin = S[1] ;
B. n-1
C. 2n-3 D. 2n-2
后,输出s的值即可。
1、查找元素
JSOI2018江苏省信息学奥林匹克冬令营
平均查找长度
为确定元素在数组中的位置,关键字和给定值进行比较的比较次数的期望值称为查
找算法在查找成功时的平均查找长度(ASL)。对于含有n个数据元素的查找表,查