信息学奥赛

正视信息学奥赛

与世无争的帅哥 提交于 2020-03-23 18:48:16
对于信息学奥赛,有教师认为是好事,应该受到重视,也有教师认为奥赛辅导太累,且获奖不易,学生成了奥赛的“牺牲品”,希望取消奥赛。那么我们该怎么样正确看待信息学奥赛呢? 信息学奥赛为学生提供了一个学习、竞争和表现的平台。通过信息学奥赛,调动了广大青少年学习计算机的积极性,使更多的青少年课外接触和学习计算机科学知识,提高了他们的逻辑思维能力、解决实际问题的能力、协作能力和沟通能力。参加信息学奥赛更是给优秀的学生提供了相互交流和学习的机会。我校一名曾获得2枚国际信息学奥赛金牌的学生说是中学参赛信息学奥赛培训,使得他养成了很好的编程习惯,对于编程能力、思维能力和交流沟通能力的培养和锻炼,恐怕没有什么比奥赛更好的机会了。 信息学奥赛给信息技术教育课程提供了动力和新的思路。参加信息学奥赛虽然是少数学生,但信息学奥赛培训这是一项系统工程,这个系统工程里面,抓普及、提高学生兴趣是前提。因此,中小学信息技术必须先抓普及,培养学生对信息技术的兴趣,然后促提高,使一部分学生在对信息技术有一定兴趣的基础逐步提升,从而把信息技术这一门学科与自己的成长和未来的发展联系起来。通过信息学奥赛使得信息技术课程得到重视。 信息学奥赛给信息技术老师们提供了一个奋斗的平台。目前信息技术学科的教学对老师没有一个完善的评价机制,学科建设在起步阶段,信息技术教师地位普遍不高,而信息学奥赛取得成绩有一定份量

信息学奥赛一本通C++语言——1115:直方图

元气小坏坏 提交于 2020-03-10 05:09:59
【题目描述】 给定一个非负整数数组,统计里面每一个数的出现次数。我们只统计到数组里最大的数。 假设 Fmax(Fmax<10000)是数组里最大的数,那么我们只统计{0,1,2…Fmax}里每个数出现的次数。 【输入】 第一行n是数组的大小。1≤n≤10000。 紧接着一行是数组的n个元素。 【输出】 按顺序输出每个数的出现次数,一行一个数。如果没有出现过,则输出0。 对于例子中的数组,最大的数是3,因此我们只统计{0,1,2,3}的出现频数。 【输入样例】 5 1 1 2 3 1 【输出样例】 0 3 1 1 # include <iostream> using namespace std ; int main ( ) { int n ; int num [ 10000 ] ; int fmax = 0 ; int s [ 10000 ] ; cin >> n ; for ( int i = 0 ; i < n ; i ++ ) { cin >> num [ i ] ; if ( num [ i ] > fmax ) { fmax = num [ i ] ; } } for ( int i = 0 ; i <= fmax ; i ++ ) { for ( int j = 0 ; j < n ; j ++ ) { if ( num [ j ] == i ) { s [ i ] ++

信息学奥赛一本通C++语言——1107:校门外的树

◇◆丶佛笑我妖孽 提交于 2020-03-08 03:49:40
【题目描述】 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,2,……,L,都种有一棵树。 由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。 【输入】 第一行有两个整数L(1 ≤ L ≤ 10000)和 M(1 ≤ M ≤ 100),L代表马路的长度,M代表区域的数目,L和M之间用一个空格隔开。接下来的M行每行包含两个不同的整数,用一个空格隔开,表示一个区域的起始点和终止点的坐标。 对于20%的数据,区域之间没有重合的部分;对于其它的数据,区域之间有重合的情况。 【输出】 包括一行,这一行只包含一个整数,表示马路上剩余的树的数目。 【输入样例】 500 3 150 300 100 200 470 471 【输出样例】 298 # include <iostream> # include <cstring> using namespace std ; int main ( ) { bool tree [ 10001 ] ; memset ( tree , 1

信息学奥赛一本通C++语言——1094:与7无关的数

若如初见. 提交于 2020-03-03 06:00:13
【题目描述】 一个正整数,如果它能被7整除,或者它的十进制表示法中某一位上的数字为7,则称其为与7相关的数。现求所有小于等于n(n<100)与7无关的正整数的平方和。 【输入】 输入为一行,正整数n(n < 100)。 【输出】 输出一行,包含一个整数,即小于等于n的所有与7无关的正整数的平方和。 【输入样例】 21 【输出样例】 2336 # include <cstdio> int main ( ) { int n , s = 0 ; scanf ( "%d" , & n ) ; for ( int i = 1 ; i <= n ; i ++ ) { if ( i % 7 != 0 && i / 10 != 7 && i % 10 != 7 ) { //被7整除 取十位看是否是7 看个位是否是7 s = s + i * i ; } } printf ( "%d" , s ) ; return 0 ; } 来源: CSDN 作者: SpaceHub 链接: https://blog.csdn.net/weixin_46272402/article/details/104578246

信息学奥赛一本通C++语言——1089:数字反转

亡梦爱人 提交于 2020-03-01 03:25:31
【题目描述】 给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零,例如输入−380,反转后得到的新数为−83。 【输入】 输入共 1 行,一个整数N。 −1,000,000,000≤N≤1,000,000,000。 【输出】 输出共 1 行,一个整数,表示反转后的新数。 【输入样例】 123 【输出样例】 321 【提示】 【输入输出样例 2】 输入: -380 输出: -83 在这里插入代码片 来源: CSDN 作者: SpaceHub 链接: https://blog.csdn.net/weixin_46272402/article/details/104575243

信息学奥赛一本通C++语言——1090:含k个3的数

萝らか妹 提交于 2020-03-01 02:27:21
【题目描述】 输入两个正整数m和k,其中1<m<100000,1<k<5 ,判断m 能否被19整除,且恰好含有k个3,如果满足条件,则输出YES,否则,输出NO。 例如,输入:43833 3,满足条件,输出YES。如果输入:39331 3,尽管有3个3,但不能被19整除,也不满足条件,应输出NO。 【输入】 m 和 k 的值,中间用单个空格间隔。 【输出】 满足条件时输出 YES,不满足时输出 NO。 【输入样例】 43833 3 【输出样例】 YES 在这里插入代码片 来源: CSDN 作者: SpaceHub 链接: https://blog.csdn.net/weixin_46272402/article/details/104575279

信息学奥赛一本通 1015 计算并联电阻的阻值

≯℡__Kan透↙ 提交于 2020-02-28 10:51:46
【题目描述】 对于阻值为 r1 和 r2 的电阻,其并联电阻阻值公式计算如下:R=11r1+1r2。输入两个电阻阻抗大小,浮点型。输出并联之后的阻抗大小,结果保留小数点后2位。 【输入】 两个电阻阻抗大小,浮点型,以一个空格分开。 【输出】 并联之后的阻抗大小,结果保留小数点后2位。 【输入样例】 1 2 【输出样例】 0.67 # include <iostream> # include <iomanip> using namespace std ; int main ( ) { double r1 , r2 , R ; cin >> r1 >> r2 ; R = 1.0 / ( ( 1 / r1 ) + ( 1 / r2 ) ) ; cout << setiosflags ( ios :: fixed ) << setprecision ( 2 ) ; cout << R << endl ; return 0 ; } 来源: CSDN 作者: Stephen Zhang 链接: https://blog.csdn.net/Croatia_Zhang/article/details/104551165

排队打水问题(信息学奥赛一本通贪心算法)

浪尽此生 提交于 2020-02-27 11:07:02
题目描述: 有n个人排队到r个水龙头打水,他们装满水的时间为 t1,t2,.........tn为整数且各不相等, 应如何安排他们打水顺序才能使他们花费时间最少(含等待时间)? 【算法分析】 由于排队时,越靠前面的计算次数越多,因此时间越小的排队越靠前得出结果越小,所以可以用贪心算法解答。 步骤如下: (1)按时间顺序从小到大排序(sort函数); (2)将排序后的时间按顺序依次放到每个水龙头的队列中; (3)统计并输出。 ———————————————— 1 #include <iostream> 2 #include <algorithm> 3 #include <cstring> 4 using namespace std; 5 const int MAXN=1000; 6 int a[MAXN],s[MAXN]; 7 int main(){ 8 int n,r,j=0,minx=0; 9 memset(s,0,sizeof(s)); 10 cin>>n>>r; 11 for(int i=0;i<=n;i++) 12 cin>>a[i]; 13 sort(a+1,a+n+1); //对所有的时间排序 14 for(int i=1;i<=n;i++){ 15 j++; 16 if(j==r+1) 17 j=1; //前r个人人为一组,第r+1个人回到第一个水龙头 18 s[j]

信息学奥赛一本通C++语言——1075:药房管理

断了今生、忘了曾经 提交于 2020-02-25 00:28:04
【题目描述】 随着信息技术的蓬勃发展,医疗信息化已经成为医院建设中必不可少的一部分。计算机可以很好地辅助医院管理医生信息、病人信息、药品信息等海量数据,使工作人员能够从这些机械的工作中解放出来,将更多精力投入真正的医疗过程中,从而极大地提高了医院整体的工作效率。 对药品的管理是其中的一项重要内容。现在药房的管理员希望使用计算机来帮助他管理。假设对于任意一种药品,每天开始工作时的库存总量已知,并且一天之内不会通过进货的方式增加。每天会有很多病人前来取药,每个病人希望取走不同数量的药品。如果病人需要的数量超过了当时的库存量,药房会拒绝该病人的请求。管理员希望知道每天会有多少病人没有取上药。 【输入】 共3行,第一行是每天开始时的药品总量m。 第二行是这一天取药的人数n(0<n≤100)。 第三行共有n个数,分别记录了每个病人希望取走的药品数量(按照时间先后的顺序)。 【输出】 只有1行,为这一天没有取上药品的人数。 【输入样例】 30 6 10 5 20 6 7 8 【输出样例】 2 在这里插入代码片 来源: CSDN 作者: SpaceHub 链接: https://blog.csdn.net/weixin_46272402/article/details/104484273

信息学奥赛一本通C++语言——1069:乘方计算

拟墨画扇 提交于 2020-02-22 11:00:21
【题目描述】 给出一个整数a和一个正整数n(−1000000≤a≤1000000,1≤n≤10000),求乘方an,即乘方结果。最终结果的绝对值不超过1000000。 【输入】 一行,包含两个整数a和n。−1000000≤a≤1000000,1≤n≤10000。 【输出】 一个整数,即乘方结果。题目保证最终结果的绝对值不超过1000000。 【输入样例】 2 3 【输出样例】 8 # include <cstdio> int main ( ) { int s = 1 , a = 0 , n = 0 ; scanf ( "%d%d" , & a , & n ) ; for ( int i = 0 ; i < n ; i ++ ) { s * = a ; } printf ( "%d" , s ) ; return 0 ; } 用函数的写法 # include <cstdio> # include <cmath> int main ( ) { int s = 0 , a = 0 , n = 0 ; scanf ( "%d%d" , & a , & n ) ; s = ( int ) pow ( a , n ) ; printf ( "%d" , s ) ; return 0 ; } 来源: CSDN 作者: SpaceHub 链接: https://blog.csdn.net