OpenJudge算法设计与分析习题解答

合集下载

OpenJudge解题经验交流

OpenJudge解题经验交流

OpenJudge解题经验交流1.1编程基础之输⼊输出01:Hello, World!02:输出第⼆个整数PS:a,b需⽤longint类型接收03:对齐输出04:输出保留3位⼩数的浮点数05:输出保留12位⼩数的浮点数08:字符三⾓形09:字符菱形10:超级玛丽游戏1.2编程基础之变量定义、赋值及转换01:整型数据类型存储空间⼤⼩02:浮点型数据类型存储空间⼤⼩PS:可利⽤sizeof函数03:其他基本数据类型存储空间⼤⼩04:填空:类型转换105:填空:类型转换206:浮点数向零舍⼊07:打印ASCII码08:打印字符09:整型与布尔型的转换PS:n需要⽤longint类型接收10:Hello, World!的⼤⼩PS:字符串最后有⼀个结束标志'\0',所以实际长度要再加11.3编程基础之算术表达式与顺序执⾏01:A+B问题PS:A,B需⽤longint类型接收02:计算(a+b)*c的值03:计算(a+b)/c的值04:带余除法05:计算分数的浮点数值06:甲流疫情死亡率07:计算多项式的值08:温度表达转化09:与圆相关的计算10:计算并联电阻的阻值12:计算球的体积13:反向输出⼀个三位数14:⼤象喝⽔16:计算线段长度17:⽤边长求三⾓形⾯积PS:海伦公式18:计算三⾓形⾯积19:A*B问题20:计算2的幂1.4编程基础之逻辑表达式与条件分⽀01:判断数正负02:输出绝对值03:奇偶数判断04:奇偶ASCII值判断05:整数⼤⼩⽐较06:判断是否为两位数07:收集瓶盖赢⼤奖08:判断⼀个数能否同时被3和5整除09:判断能否被3,5,7整除10:有⼀门课不及格的学⽣11:晶晶赴约会12:骑车与⾛路13:分段函数PS:N需定义为single类型14:计算邮资15:最⼤数输出PS:三个整数需⽤longint接收16:三⾓形判断PS:输⼊的三⾓形三条边长不⼀定是从⼩到⼤排好序的,⽽是随机给的17:判断闰年18:点和正⽅形的关系19:简单计算器1.5编程基础之循环控制01:求平均年龄02:均值03:求整数的和与均值PS:样例输⼊有误,n个整数是在⼀⾏⾥⾯,⽽不是n⾏04:最⾼的分数05:整数序列的元素最⼤跨度值06:奥运奖牌计数08:满⾜条件的数累加09:整数的个数10:与指定数字相同的数的个数11:乘⽅计算12:⼈⼝增长问题13:菲波那契数列PS:k等于1和2的情况需单独考虑15:鸡尾酒疗法16:救援18:⾓⾕猜想PS:运算的过程会超出longint范围19:津津的储蓄计划20:药房管理21:正常⾎压22:求特殊⾃然数PS:数据进制转换23:统计满⾜条件的4位数个数24:级数求和25:分离整数的各个数位26:数字反转27:含k个3的数28:开关灯29:求分数序列和PS:p、q会达到longint级别30:计算分数加减表达式的值31:求阶乘的和32:求出e的值33:计算多项式的值34:与7⽆关的数35:数1的个数36:数字统计37:画矩形38:质因数分解39:第n⼩的质数PS:第10000⼩的质数是104729 40:⾦币t1392:Bank Interestt2757:多边形内⾓和PS:while not eoln dot6:Financial Management1.6编程基础之⼀维数组01:与指定数字相同的数的个数02:陶陶摘苹果03:计算书费04:数组逆序重放PS:第⼆⾏的n个整数需⽤longint类型接收05:年龄与疾病06:校门外的树07:向量点积计算08:⼤整数加法09:计算2的N次⽅PS:⾼精度乘⽅,2的100次⽅是⼀个30位整数a1738:⼤整数减法t1577:Jolly Jumpers1.7编程基础之字符串01:统计数字字符个数02:找第⼀个只出现⼀次的字符04:⽯头剪⼦布05:输出亲朋字符串06:合法 C 标识符08:密码翻译09:潜伏者11:将字符串中的⼩写字母转换成⼤写字母12:⼤⼩写字母互换13:整理药名16:删除单词后缀25:ISBN号码28:判断字符串是否为回⽂1.8编程基础之多维数组01:矩阵交换⾏PS:矩阵中的数字需⽤integer类型接收02:同⾏列对⾓线的格⼦03:计算矩阵边缘元素之和PS:如果不⽤数组应该怎么做?04:错误探测PS:此题不能⽤while not eof do begin05:计算鞍点06:图像相似度07:矩阵加法08:矩阵乘法09:矩阵转置10:图像旋转12:图像模糊处理13:扫雷游戏地雷数计算15:肿瘤⾯积1.9编程基础之顺序查找01:查找特定的值02:输出最⾼分数的学⽣姓名03:不⾼兴的津津04:谁拿了最多奖学⾦05:最⼤值和最⼩值的差06:笨⼩猴07:不与最⼤数相同的数字之和PS:如果不⽤⼀维数组应该怎么做?09:直⽅图12:最长平台PS:平台中的数有负数的情况13:整数去重15:接⽔问题t1798:数字求和1.10编程基础之简单排序01:谁考了第k名02:奇数单增序列03:成绩排序04:奖学⾦05:分数线划定PS:注意排好序后划定分数线时请考虑同分并列的情况06:整数奇偶排序PS:10个数中有可能会有相同的数噢09:明明的随机数1.12编程基础之函数与过程抽象01:简单算术表达式求值02:短信计费03:甲流病⼈初筛04:最匹配的矩阵05:统计单词数06:寻宝07:机器翻译08:Vigenère密码PS:注意是根据密钥和密⽂求明⽂09:图像旋转翻转变换10:素数对1.13编程基础之综合应⽤03:⼤整数减法05:素数回⽂数的个数07:玛雅历09:⼤整数乘法PS:⼆个200位⼤数相乘结果可能达到400位10:判决素数个数PS:X可能会⼩于Y14:求满⾜条件的3位数PS:实际满⾜条件的3位数有9个22:因⼦分解25:计算两个⽇期之间的天数27:除以1328:出现次数超过⼀半的数PS:超过⼀半是指超过n的⼀半2.1基本算法之枚举1752:鸡兔同笼1809:两倍1812:完美⽴⽅1943:满⾜条件的整数2722:和数2723:因⼦问题3526:最简真分数PS:最简真分数组合的个数最⼤可达longint级6175:细菌的战争PS:公式的写法有讲究,g:=trunc(g+g*5/100);可以AC,但如果写成g:=trunc(g*1.05);就AC不了6184:找和为K的两个元素PS:⽤类似选择排序的双重循环穷举6187:称体重6188:⽐饭量7621:硬币⾯值组合PS:输出顺序为:先按c的值从⼩到⼤,若c相同则按b的值从⼩到⼤。

noiopenjudge题库

noiopenjudge题库

noiopenjudge题库NOI(全国青少年信息学奥林匹克竞赛)是我国最具权威性的青少年计算机科学竞赛之一,也是选拔国家集训队和参加国际奥赛的重要比赛。

通过参加NOI,青少年可以锻炼自己的计算机编程能力,同时也可以提升自己的解决问题的能力和创新思维。

NOI的题库是NOIP(全国青少年信息学奥林匹克竞赛选拔赛)的考题库,包含了丰富的题目类型和难度级别。

在解题过程中,考生需要学习和掌握数据结构、算法和程序设计等相关知识。

下面是一些与NOI题库相关的参考内容:1. 数据结构:数据结构是编程中非常重要的基础知识,它涉及到如何组织和存储数据,以及如何操作和访问数据。

常见的数据结构有数组、链表、栈、队列、树、图等。

学习数据结构可以帮助考生更好地理解和解决NOI题库中的问题。

2. 算法:算法是解决问题的具体步骤和方法,它涉及到计算机程序的执行过程。

在解决NOI题库中的问题时,考生需要学习和掌握一些常用的算法,如排序算法(如冒泡排序、快速排序)、查找算法(如二分查找)、动态规划算法等。

3. 程序设计语言:在解决NOI题库中的问题时,考生需要使用一门程序设计语言编写代码。

常用的程序设计语言有C++、Java、Python等,考生需要熟悉自己所使用的编程语言的语法和特性,以便能够编写出高效、正确的程序。

4. 解题思路:解决NOI题库中的问题,不仅需要学习和掌握上述的基础知识,还需要培养良好的解题思路。

在解题过程中,考生需要学会分析问题、寻找规律、列出数学模型,然后根据问题的特点选择合适的数据结构和算法进行解决。

5. 实践训练:解决NOI题库中的问题,需要进行大量的实践训练,在实际的编程过程中不断积累经验和提高自己的编程能力。

考生可以多参加一些在线编程平台的练习和比赛,如牛客网、LeetCode等,以提高自己的编程水平和解题能力。

总之,NOI题库是提高青少年计算机科学能力的重要资源,通过学习和解决NOI题库中的问题,可以不断提升自己的编程技能和解决问题的能力。

openjudge1.6题目合集(08~15)

openjudge1.6题目合集(08~15)

openjudge1.6题⽬合集(08~15)08-⽯头剪⼑布#include<iostream>#include<cmath>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int a[10001];int b[10001];int now_a[100001];int now_b[100001];int ying_a;int ying_b;int ping;int main(){int n;//总共进⾏了n轮int a_z,b_z;//a,b的出拳周期cin>>n>>a_z>>b_z;for(int i=1;i<=a_z;i++){cin>>a[i];now_a[i]=a[i];}for(int i=1;i<=b_z;i++){cin>>b[i];now_b[i]=b[i];}int now=1;for(int i=a_z+1;i<=n;i++){a[i]=now_a[now];if(now==a_z){now=1;}else now++;}for(int i=a_z+1;i<=n;i++){a[i]=now_a[now];if(now==a_z){now=1;}else now++;}for(int i=b_z+1;i<=n;i++){b[i]=now_b[now];if(now==b_z){now=1;}else now++;}for(int i=1;i<=n;i++)// 0⽯头 2剪⼑ 5布{if(a[i]==0&&b[i]==0)ping++;if(a[i]==0&&b[i]==2)ying_a++;if(a[i]==0&&b[i]==5)ying_b++;if(a[i]==2&&b[i]==0)ying_b++;if(a[i]==2&&b[i]==2)ping++;if(a[i]==2&&b[i]==5)ying_a++;if(a[i]==5&&b[i]==0)ying_a++;if(a[i]==5&&b[i]==2)ying_b++;if(a[i]==5&&b[i]==5)ping++;}if(ying_a>ying_b)cout<<"A";}else if(ying_a<ying_b) {cout<<"B";}else cout<<"draw"; return0;}09-向量点积计算#include<iostream>#include<cmath>#include<cstdio>#include<cstring>#include<algorithm> using namespace std; int a[10001];int b[10001];int tot[10001];long long int ans;int main(){int n;cin>>n;for(int i=1;i<=n;i++) {cin>>a[i];}for(int i=1;i<=n;i++) {cin>>b[i];}for(int i=1;i<=n;i++) {tot[i]=a[i]*b[i];}for(int i=1;i<=n;i++) {ans=tot[i]+ans;}cout<<ans;return 0;}10-⼤整数加法#include<iostream>#include<cstdio>#include<cstring> using namespace std; char a[100001];char b[100001];char c[100001];int a1[100001];int b1[100001];int c1[100001];int main(){scanf("%s",&a);scanf("%s",&b);int la=strlen(a);int lb=strlen(b);for(int i=0;i<la;i++)a1[i]=a[la-i-1]-'0';for(int i=0;i<lb;i++)b1[i]=b[lb-i-1]-'0';int x=0;int i=0;while(i<la||i<lb){c1[i]=a1[i]+b1[i]+x; x=c1[i]/10;c1[i]=c1[i]%10;i++;{if(c1[i]==0&&i>=1)i--;else break;}for(int j=i;j>=0;j--)cout<<c1[j];return0;}11-⼤整数减法#include<iostream>#include<cstdio>#include<cstring>using namespace std;char a[10001];char b[10001];int a1[10001];int b1[10001];int c[10001];int main(){scanf("%s",&a);scanf("%s",&b);int la=strlen(a);int lb=strlen(b);if(lb>la||(la==lb&&strcmp(a,b)<0)) {swap(a,b);cout<<"-";}la=strlen(a);lb=strlen(b);for(int i=0;i<la;i++){a1[i]=a[la-i-1]-'0';}for(int i=0;i<lb;i++){b1[i]=b[lb-i-1]-'0';}int i=0;//当前位数while(i<la){if(a1[i]-b1[i]<0){a1[i]=a1[i]+10;a1[i+1]--;}c[i]=a1[i]-b1[i];i++;}while(1){if(c[i]==0&&i>=1)i--;else break;}for(int j=i;j>=0;j--)cout<<c[j];return0;}12-计算2的n次⽅#include<iostream>#include<cmath>#include<cstdio>#include<cstring>using namespace std;int n;int ans[100001]={0,2};int lans=1;int main()if(n==0){cout<<"1";return0;}else if(n==1){cout<<"2";return0;}else if(n==3){cout<<"8";return0;}for(int i=1;i<=n-1;i++){int x=0;for(int j=1;j<=lans;j++) {ans[j]=ans[j]*2+x; x=ans[j]/10;if(x>0)lans++;ans[j]=ans[j]%10; }}int flag=0;for(int i=lans-1;i>=1;i--) {if(ans[i]==0&&flag==0)continue;else flag=1;cout<<ans[i];}return0;}13-⼤整数的因⼦#include<iostream>#include<cstdio>#include<cstring>using namespace std;char a1[10001];int a[10001];int c[10001];int tot;int main(){gets(a1);int la=strlen(a1);for(int i=0;i<la;i++){a[i+1]=a1[i]-48;}int x=0;//商for(int j=2;j<=9;j++){memset(c,0,sizeof(c)); x=0;for(int i=1;i<=la;i++) {c[i]=(x*10+a[i])/j;x=(x*10+a[i])%j;}if(x==0){tot++;cout<<j<<"";}}if(tot==0){cout<<"none";}/*int lc=1;for(int i=1;i<=la;i++)if(c[i]==0&&lc<la)lc++;else break;}for(int i=lc;i<=la;i++)cout<<c[i];cout<<endl;cout<<x;*/return0;}14-求10000以内n的阶乘#include<iostream>#include<cstdio>#include<cmath>#include<cstring>using namespace std;int a[1000001]={1};int ans[10000001]={1};char n[1001];int en[1001];int main(){int n;cin>>n;int lans=1;int x=0;for(int i=1;i<=n;i++){for(int j=0;j<lans;j++){a[j]=a[j]*i+x;x=a[j]/10;if(x>0&&j==lans-1)lans++;a[j]=a[j]%10;}}int flag=0;for(int i=lans;i>=0;i--){if(a[i]==0&&flag==0)continue;else flag=1;cout<<a[i];}return0;}15-阶乘和#include<iostream>#include<cstdio>#include<cmath>#include<cstring>using namespace std;int a[10001]={1};int ans[100001]={0};char n[1001];int en[1001];int lans=1;int la=1;int x;int main(){int n;cin>>n;int x=0;for(int i=1;i<=n;i++)//寻找每⼀个数 {memset(a,0,sizeof(a));a[0]=1;for(int k=1;k<=i;k++)//求阶乘 {for(int j=0;j<la;j++){a[j]=a[j]*k+x;x=a[j]/10;if(x>0&&j==la-1)la++;a[j]=a[j]%10;}}int l=0;x=0;while(l<=la||l<=lans) {ans[l]=ans[l]+a[l]+x; x=ans[l]/10;if(x>0)lans++;ans[l]=ans[l]%10; l++;}}int flag=0;for(int i=lans;i>=0;i--){if(ans[i]==0&&flag==0)continue;else flag=1;cout<<ans[i];}return0;}。

算法设计与分析第二版课后习题及解答(可编辑)

算法设计与分析第二版课后习题及解答(可编辑)

算法设计与分析第二版课后习题及解答算法设计与分析基础课后练习答案习题1.14.设计一个计算的算法,n是任意正整数。

除了赋值和比较运算,该算法只能用到基本的四则运算操作。

算法求 //输入:一个正整数n2//输出:。

step1:a1; step2:若a*an 转step 3,否则输出a; step3:aa+1转step 2;5. a.用欧几里德算法求gcd(31415,14142)。

b. 用欧几里德算法求gcd(31415,14142),比检查min{m,n}和gcd(m,n)间连续整数的算法快多少倍?请估算一下。

a. gcd31415, 14142 gcd14142, 3131 gcd3131, 1618 gcd1618, 1513 gcd1513, 105 gcd1513, 105 gcd105, 43 gcd43, 19 gcd19, 5 gcd5, 4 gcd4, 1 gcd1, 0 1.b.有a可知计算gcd(31415,14142)欧几里德算法做了11次除法。

连续整数检测算法在14142每次迭代过程中或者做了一次除法,或者两次除法,因此这个算法做除法的次数鉴于1?14142 和 2?14142之间,所以欧几里德算法比此算法快1?14142/11 ≈1300 与2?14142/11 ≈ 2600 倍之间。

6.证明等式gcdm,ngcdn,m mod n对每一对正整数m,n都成立.Hint:根据除法的定义不难证明:如果d整除u和v, 那么d一定能整除u±v;如果d整除u,那么d也能够整除u的任何整数倍ku.对于任意一对正整数m,n,若d能整除m和n,那么d一定能整除n和rm mod nm-qn;显然,若d能整除n和r,也一定能整除mr+qn和n。

数对m,n和n,r具有相同的公约数的有限非空集,其中也包括了最大公约数。

故gcdm,ngcdn,r7.对于第一个数小于第二个数的一对数字,欧几里得算法将会如何处理?该算法在处理这种输入的过程中,上述情况最多会发生几次?Hint:对于任何形如0mn的一对数字,Euclid算法在第一次叠代时交换m和n, 即gcdm,ngcdn,m并且这种交换处理只发生一次.8.a.对于所有1≤m,n≤10的输入, Euclid算法最少要做几次除法?1次b. 对于所有1≤m,n≤10的输入, Euclid算法最多要做几次除法?5次gcd5,8习题1.21.农夫过河P?农夫W?狼 G?山羊 C?白菜2.过桥问题1,2,5,10---分别代表4个人, f?手电筒4. 对于任意实系数a,b,c, 某个算法能求方程ax^2+bx+c0的实根,写出上述算法的伪代码可以假设sqrtx是求平方根的函数算法Quadratica,b,c//求方程ax^2+bx+c0的实根的算法//输入:实系数a,b,c//输出:实根或者无解信息If a≠0D←b*b-4*a*cIf D0temp←2*ax1←-b+sqrtD/tempx2←-b-sqrtD/tempreturn x1,x2else if D0 return ?b/2*ael se return “no real roots”else //a0if b≠0 return ?c/belse //ab0if c0 return “no real numbers”else return “no real roots”5. 描述将十进制整数表达为二进制整数的标准算法a.用文字描述b.用伪代码描述解答:a.将十进制整数转换为二进制整数的算法输入:一个正整数n输出:正整数n相应的二进制数第一步:用n除以2,余数赋给Kii0,1,2,商赋给n第二步:如果n0,则到第三步,否则重复第一步第三步:将Ki按照i从高到低的顺序输出b.伪代码算法 DectoBinn//将十进制整数n转换为二进制整数的算法//输入:正整数n//输出:该正整数相应的二进制数,该数存放于数组Bin[1n]中i1while n!0 doBin[i]n%2;nintn/2;i++;while i!0 doprint Bin[i];i--;9.考虑下面这个算法,它求的是数组中大小相差最小的两个元素的差.算法略对这个算法做尽可能多的改进.算法 MinDistanceA[0..n-1]//输入:数组A[0..n-1]//输出:the smallest distance d between two of its elements 习题1.3考虑这样一个排序算法,该算法对于待排序的数组中的每一个元素,计算比它小的元素个数,然后利用这个信息,将各个元素放到有序数组的相应位置上去.a.应用该算法对列表”60,35,81,98,14,47”排序b.该算法稳定吗?c.该算法在位吗?解:a. 该算法对列表”60,35,81,98,14,47”排序的过程如下所示:b.该算法不稳定.比如对列表”2,2*”排序c.该算法不在位.额外空间for S and Count[]4.古老的七桥问题第2章习题2.17.对下列断言进行证明:如果是错误的,请举例a. 如果tn∈Ogn,则gn∈Ωtnb.α0时,Θαgn Θgn解:a这个断言是正确的。

openjudge题库答案及解析

openjudge题库答案及解析

openjudge题库答案及解析作为一名程序员,我们时常需要刷LeetCode或者openjudge等算法题库来提升我们的编程能力。

然而,有时候面对一些看似极难的题目,我们可能会感到无从下手。

这时候,有一份题库答案及解析就可以帮助我们更快地理解和解决这些问题。

首先,让我们来了解一下openjudge。

openjudge是清华大学出品的一个在线评测系统,提供了大量的算法、编程题目,帮助学生提升编程能力。

除了编程题目,openjudge还提供了大量的在线课程、测试和编程教程。

如果你是一位大学生,openjudge将是你最好的练习场所。

那么,如何获取openjudge题库的答案及解析呢?其实很简单,我们可以通过搜索引擎或者各类算法社区来查找。

如果你已经解决了某个题目,但是还不是很确定自己的答案是否正确,可以直接搜索这道题目的题名+openjudge,一般就可以找到题目的解答及解析。

许多大神也会在网上写一些关于openjudge的算法题解,如果你想更深入地学习,这些题解也是非常有价值的。

接下来,我想给大家分享一些openjudge题目的答案及解析。

这些题目涵盖了一些基础的算法和数据结构,对于初学者是非常有帮助的。

第一个题目是“递归实现二分查找”。

这道题目比较基础,但是对于初学者来说还是有一定难度的。

我们可以直接通过递归函数来实现二分查找,代码如下:```python# 递归实现二分查找def binary_search(lst, val, l, r):if l > r:return -1mid = (l + r) // 2if lst[mid] == val:return midelif lst[mid] > val:return binary_search(lst, val, l, mid - 1)else:return binary_search(lst, val, mid + 1, r)```在这个递归函数当中,我们需要传入一个列表、要查找的值val、以及列表的左右边界l和r。

openjudge幼儿园足球题解析

openjudge幼儿园足球题解析

Openjudge幼儿园足球题解析介绍幼儿园足球题是一个针对幼儿园学生的足球问题,主要考察幼儿对基本足球规则和运动技能的理解。

通过这道题目的分析和解析,我们将帮助幼儿更好地理解足球,并提高他们的足球技巧。

题目描述这题目要求幼儿假设自己是一个足球裁判,在比赛过程中需要判断球场上发生的事件,包括球是否出界、球是否进门等。

题目分析1.首先,幼儿需要明确足球比赛的规则,包括球场的尺寸、球的大小、比赛时间等。

2.幼儿需要了解什么情况下球算出界,例如球完全越过界线即算出界。

3.幼儿需要了解什么情况下球算进门,例如球完全越过门线即算进门。

4.幼儿需要学会观察判断球是否出界或进门,例如看球是否完全越过界线或门线。

解题思路1.首先,幼儿需要明确足球比赛的规则。

他们可以通过观看足球比赛、与教练或其他儿童讨论来获得这些知识。

2.幼儿需要学会观察判断球是否出界或进门。

他们可以通过观察标志着界线或门线的边界,以及球是否完全越过这些线来判断球的状态。

3.对于判断球是否出界,幼儿可以注意以下几点:–观察球是否完全越过边界线,而不是仅仅挨着边界线滚动。

–观察球是否碰到了横杆或立柱,如果球完全越过边界线但碰到了横杆或立柱,也算出界。

4.对于判断球是否进门,幼儿可以注意以下几点:–观察球是否完全越过门线,并且进入了球门内部。

–观察球是否从门的上方进入,如果球越过门线但是从门的上方进入,是不算进门的。

5.幼儿应该提醒他们自己保持专注,仔细观察比赛过程中的细节。

心得体会通过这道题目,幼儿可以加深对足球规则和技巧的理解。

同时,他们也可以培养他们观察力和判断力,提高他们在比赛中作为裁判的能力。

此外,幼儿还可以通过练习判断球是否出界和进门,来提高他们的反应速度和足球技巧。

结论幼儿园足球题目是一个帮助幼儿理解足球规则和提高判断力的练习题。

通过观察和判断,幼儿可以学会区分球是否出界和进门。

这道题目不仅可以提高幼儿的足球技巧,还可以培养他们的观察力和判断力。

OpenJudge计算概论基础练习(三)

OpenJudge计算概论基础练习(三)

OpenJudge计算概论基础练习(3)1:年龄与疾病/hw03/1/总时间限制:1000ms内存限制:65536kB描述某医院想统计一下某项疾病的获得与否与年龄是否有关,需要对以前的诊断记录进行整理。

输入共2行,第一行为过往病人的数目n(0 < n <= 100),第二行为每个病人患病时的年龄。

输出每个年龄段(分四段:18以下,19-35,36-60,60-)的患病人数占总患病人数的比例,以百分比的形式输出,精确到小数点后两位(double)。

提示输出%可以用下面的语句printf("%%");2:成绩判断/hw03/2/总时间限制:1000ms内存限制:6000kB描述输入一个0--100的分数,判断分数代表什么等级。

95<=分数<=100, 输出190<=分数<95,输出285<=分数<90,输出380<=分数<85,输出470<=分数<80,输出560<=分数<70输出6分数< 60;输出7.输入n输出m3:找出第k大的数/hw03/3/总时间限制:1000ms内存限制:1000kB描述用户输入N和K,然后接着输入N个正整数(无序的),程序在不对N个整数排序的情况下,找出第K大的数。

注意,第K大的数意味着从大到小排在第K位的数。

并且,要求大家编写这个程序要用到自定义的函数。

输入NKa1 a2 a3 a4 ..... aN输出b4:奥运奖牌计数/hw03/4/总时间限制:1000ms内存限制:65536kB描述2008年北京奥运会,A国的运动员参与了n天的决赛项目(1≤n≤17)。

现在要统计一下A国所获得的金、银、铜牌数目及总奖牌数。

输入第1行是A国参与决赛项目的天数n,其后有n行,每一行是该国获得的金、银、铜牌数目,用空格隔开。

输出1行,包括4个整数,为A国所获得的金、银、铜牌总数及总奖牌数,用空格隔开。

Openjudge-NOI题库-和数

Openjudge-NOI题库-和数

Openjudge-NOI题库-和数题⽬描述 Description给定⼀个正整数序列,判断其中有多少个数,等于数列中其他两个数的和。

⽐如,对于数列1 2 3 4, 这个问题的答案就是2, 因为3 = 2 + 1, 4 = 1 + 3。

输⼊输出格式 Input/output输⼊:共两⾏,第⼀⾏是数列中数的个数n ( 1 <= n <= 100),第⼆⾏是由n个不⼤于10000的正整数组成的数列,相邻两个整数之间⽤单个空格隔开。

输出:⼀个整数,即数列中等于其他两个数之和的数的个数。

输⼊输出样例 Sample input/output样例测试点#1输⼊样例:241 2 3 453 5 7 9 10输出样例:21思路:可以先将这个数组中所有两个数相加的和存⼊另⼀个数组(两重循环即可),然后再扫描⼀遍这个数组同相加的和的数组⽐较,如果相同则答案++代码如下:1 #include <stdio.h>2int main()3 {4int n,i,j;5int a;6int kk=0;7int aa[102],bb[99999];8int ans=0;9 scanf("%d",&n);10while(n>0)11 {12 scanf("%d",&a);13for(i=0;i<a;i++)14 {15 scanf("%d",&aa[i]);16 }17/*=======================*///将这个数组中的每两个数和全部存⼊bb中18for(i=0;i<a;i++)19 {20for(j=i+1;j<a;j++)21 {22 bb[kk]=aa[i]+aa[j];23 kk++;24 }25 }26/*=======================*///循环判断两个数和的数组中是否有和元素组⼀样的27for(i=0;i<kk;i++)28 {29for(j=0;j<a;j++)30 {31if(bb[i]==aa[j]) ans++;//有,ans++32 }33 }34 printf("%d\n",ans);35 ans=0;//答案归零36 kk=0;//循环变量归零37 n--;//循环条件控制38 }39return0;40 }。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
3、鸡兔同笼
描述
一个笼子里面关了鸡和兔子(鸡有 2 只脚,兔子有 4 只脚,没有例外)。已经知道了笼子里面脚的 总数 a,问笼子里面至少有多少只动物,至多有多少只动物。
输入
一行,一个正整数 a (a < 32768)。
输出
一行,包含两个正整数,第一个是最少的动物数,第二个是最多的动物数,两个正整数用一个空格 分开。 如果没有满足要求的答案,则输出两个 0,中间用一个空格分开。
样例输入
45 2 3 2 1
样例输出
1 BeiJu 1 BeiJu 源代码: #include <stdio.h> #include <string.h> int b[ 222 ]; int a[ 222 ]; int n, m;
int main() {
scanf("%d%d", &n, &m); for(int i = 1; i <= n; i++ ){
if(lef >= righ) { return ;
} int mid = lef + (righ - lef) / 2; reSeq(seq, lef, mid);
reSeq(seq, mid + 1, righ); int totalSize = righ - lef + 1; long long tmp[totalSize]; int n = lef; int m = mid + 1; int i = 0; while(n <= mid || m <= righ) {
输入
无输入
输出
按照饭量大小输出 3 人顺序,比如: ABC
样例输入

样例输出
无 #include<stdio.h>
#include<stdlib.h> int main(){
int A,B,C; int a,b,c; for(A=1;A<=3;A++){
for(B=1;B<=3;B++){ for(C=1;C<=3;C++){ a=((B>A)+(C==A)); b=((A>B)+(A>C)); c=((C>B)+(B>A)); if( ((A>B&&a<b)||(A==B&&a==b)||(A<B&&a>b)) + ((A>C&&a<c)||(A==C&&a==c)||(A<C&&a>c)) + ((B<C&&b>c)||(B==C&&b==c)||(B>C&&b<c)) ==3){ if(a>b&&a>c){ if(b>c) printf("ABC"); else printf("ACB"); } if(b>a&&b>c){ if(a>c) printf("BAC"); else printf("BCA"); } if(c>a&&c>b){ if(a>b) printf("CAB"); else printf("CBA"); }
int A=n,B=n/2,C=n/5;
for(i=0;i<=C;i++){
for(j=0;j<=B;j++){
for(k=0;k<=A;k++){
if(i*5+j*2+k*1==n){
printf("%03d%12d%12d%12d\n",t,k,j,i);
t++;
}
}
}
}
getchar();
return 0;
5、称体重
描述
赵、钱、孙、李四个人中既有大人也有小孩,给他们称体重时发现,他们每个人的体重都不一样, 且体重(单位:公斤)恰好是 10 的整数倍,且他们的体重都不高 于 50 公斤,已知赵、钱两人的 体重之和恰好等于孙、李两人的体重之和;赵、李两人的体重之和大于孙、钱两人的体重之和,并 且赵、孙俩人的体重之和还小于钱的体重。请编写一个程序,按照体重从小到大的顺序,打印出四 人的姓氏的首字母和体重数。
输入

输出
输出要求:按 ABCDE 的顺序输出 5 行,其中第 1 行是 A 的名次,第 2 行是 B 的名次, 第 3 行是 C 的名次,第 4 行是 D 的名次,第 5 行是 E 的名次。
样例输入
样例输出
源代码: #include<stdio.h> int main() {
printf("5\n"); printf("2\n"); printf("1\n"); printf("3\n"); printf("4\n"); return 0;
} } } } getchar(); return 0; }
7、求排列的逆序数
描述
在 Internet 上的搜索引擎经常需要对信息进行比较,比如可以通过某个人对一些事物的排名来估计 他(或她)对各种不同信息的兴趣,从而实现个性化的服务。 对于不同的排名结果可以用逆序来评价它们之间的差异。考虑 1,2,…,n 的排列 i1,i2,…,in,如果 其中存在 j,k,满足 j < k 且?ij?> ik, 那么就称(ij,ik)是这个排列的一个逆序。
1、硬币面值组合
描述
使用 1 角、2 角、5 角硬币组成 n 角钱。 设 1 角、2 角、5 角的硬币各用了 a、b、c 个,列出所有可能的 a, b, c 组合。 输出顺序为:先按 c 的值从小到大,若 c 相同则按 b 的值从小到大。
输入
一个整数 n(1 <= n <= 100),代表需要组成的钱的角数。
输出
输出有若干行,每行的形式为: iabc
第 1 列 i 代表当前行数(行数从 001 开始,固定 3 个字符宽度,宽度不足 3 的用 0 填充),后面 3 列 a, b, c 分别代表 1 角、2 角、5 角硬币的个数(每个数字固定 12 个字符宽度,宽度不足的在 左边填充空格)。
样例输入
10
样例输出
if(m > righ || (n <= mid && seq[n] <= seq[m])) { tmp[i++] = seq[n++];
} else { tmp[i++] = seq[m++]; ans += mid - n + 1;
} } i = lef; for(int j = 0; j < totalSize; j++) {
现给定 1,2,…,n 的一个排列,求它的逆序数。
输入
第一行是一个整数 n,表示该排列有 n 个数(n <= 100000)。
第二行是 n 个不同的正整数,之间以空格隔开,表示该排列。
输出
输出该排列的逆序数。
样例输入
6 263451
样例输出
8
提示
1. 利用二分归并排序算法(分治); 2. 注意结果可能超过 int 的范围,需要用 long long 存储。 #include <cstdio> using namespace std; const int MAX_NUM = 100000 + 5; long long seq[MAX_NUM]; int N; long long ans; void reSeq(long long* seq, int lef, int righ) {//用 long long 存储,避免结果超过 int 的范围
001
10
0
0
002
8
1
0
003
6
2
0
004
4
3
0
005
2
4
0
006
0
5
0
007
5
0
1
008
3
1
1
009
1
2
1
010
0
0
2
源代码:
#include<stdio.h>
#include<stdlib.h>
int main(){
int t=1;
int i,j,k;
int n;
scanf("%d",&n);
for(a[1]=1;a[1]<=5;a[1]++){ for(a[2]=1;a[2]<=5;a[2]++){ for(a[3]=1;a[3]<=5;a[3]++){ if((a[1]!=a[0]&&a[2]!=a[1]&&a[2]!=a[0]&&a[3]!=a[2]&&a[3]!=a[1]&&a[3]!=a[0]) &&(a[0]+a[1]==a[2]+a[3])&&(a[0]+a[3]>a[1]+a[2])&&(a[0]+a[2]<a[1])){ for(i=0;i<4;i++){ b[i]=a[i]; } }
相关文档
最新文档