通过海量题库、编程比赛和实时排名,系统化提升您的编程能力。
"NOIP真题" 试卷中 NOIP第十六届全国青少年信息学奥林匹克联赛初赛试题[2010普及组] 中有题目如下:
第1题
(过河问题) 在一个月黑风高的夜晚,有一群人在河的右岸,想通过唯一的一根独木桥 走到河的左岸。 在这伸手不见五指的黑夜里, 过桥时必须借助灯光来照明, 很不幸的是,他 们只有一盏灯。 另外,独木桥上最多承受两个人同时经过,否则将会坍塌。 每个人单独过桥 都需要一定的时间,不同的人需要的时间可能不同。两个人一起过桥时,由于只有一盏灯,所以需要的时间是较慢的那个人单独过桥时所花的时间。现输入 n( 2≤n≤100)和这 n 个 人单独过桥时需要的时间,请计算总共最少需要多少时间,他们才能全部到达河的左岸。 例如,有 3 个人甲、乙、丙,他们单独过桥的时间分别为 1、 2、4,则总共最少需要 的时间为 7 。具体方法是:甲、乙一起过桥到河的左岸,甲单独回到河的右岸将灯带回,然 后甲、丙再一起过桥到河的左岸,总时间为 2+1+4=7 。
#include<iostream> using namespace std; const int SIZE = 100; const int INFINITY = 10000; const bool LEFT = true; const bool RIGHT = false; const bool LEFT_TO_RIGHT = true; const bool RIGHT_TO_LEFT = false; int n, hour[SIZE]; //存放每个人的过河时间 bool pos[SIZE]; int max(int a, int b) { if (a > b) return a; else return b; } int go(bool stage) { int i, j, num, tmp, ans; if (stage == RIGHT_TO_LEFT) { num = 0; ans = 0; for (i = 1; i <= n; i++) if (pos[i] == RIGHT) { num++; //人数加1 if (hour[i] > ans) ans = hour[i]; //ans保留了最长的过桥时间, } if ( ① __________ ) return ans; ans = INFINITY; for (i = 1; i <= n - 1; i++) if (pos[i] == RIGHT) //如果这个人在右侧 for (j = i + 1; j <= n; j++) if (pos[j] == RIGHT) { pos[i] = LEFT; pos[j] = LEFT; tmp = max(hour[i], hour[j]) + ② __________) ; if (tmp < ans) ans = tmp; pos[i] = RIGHT; pos[j] = RIGHT; } return ans; } if (stage == LEFT_TO_RIGHT) { ans = INFINITY; for (i = 1; i <= n; i++) if ( ③_________) { pos[i] = RIGHT; tmp = ④ _________; if (tmp < ans) ans = tmp; ⑤__________ ; } return ans; } return 0; } int main() { int i; cin>>n; for (i = 1; i <=n; i++) { cin>>hour[i]; pos[i] = RIGHT; //pos是记录每个元素所处的位置。 } cout<<go(RIGHT_TO_LEFT)<<endl; //初始状态RIGHT_TO_LEFT return 0; }
所属试卷:NOIP第十六届全国青少年信息学奥林匹克联赛初赛试题[2010普及组]
下列语句分别是不同程序中的第一个输入输出语句,若去掉其
下列语句中,可以作为无限循环语句的是( )。下列语句中
有以下程序程序运行后的输出结果是( )。
以下叙述中正确的是( )。
有以下结构体说明、变量定义和赋值语句则以下scanf函
以下不能将键盘输入的字符串:This is a str
有以下程序程序运行后的输出结果是。
以下叙述中错误的是( )。
请在下面程序的横线处填上适当内容,以使程序完整,并使运
已知列表x=[1,2],执行语句y=x后,表达式 x
查看变量内存地址的Python内置函数是_______
设文件number.dat中存放了一组整数。请编写程序
下面程序段运行结果是_________。
以下程序输出结果是_________。
在C语言中,输入操作是由库函数____________
请阅读程序段:上面程序段的输出结果是_________
下面4个关于C语言的结论中错误的是( )。
______目录用来存放系统管理员使用的管理程序。
定义的游标cur读取student表中学生名单(含学号
若某线性表最常用的操作是存取任一指定序号的元素和在最后
下面有关主键和外键之间的关系描述,正确的是。
定义三元组(a,b,c)(其中a,b,c均为正数)的距
功能:编写函数fun其功能是:根据整型形参m,计算如下
有8个苹果从左到右排成一排,你要从中挑选至少一个苹果,
函数proc的功能是:根据整型形参n,计算如下公式的值
若有如下程序段,其中 s、a、b、c 均已定义为整型变
(读入整数)请完善下面的程序,使得程序能够读入两个 i
输入:12 172 4 6 9 11 15 17 18
二叉树的( )第一个访问的节点是根节点。
一个正整数在二进制下有100 位,则它在十六进制下有
更多选择题
更多填空题
第十章 C++流
第九章 C++模板
第八章 C++运算符重载
C++语言程序设计真题5
C++语言程序设计真题4
C++语言程序设计真题3
C++语言程序设计真题2