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题库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)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题库答案及解析作为一名程序员,我们时常需要刷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幼儿园足球题解析介绍幼儿园足球题是一个针对幼儿园学生的足球问题,主要考察幼儿对基本足球规则和运动技能的理解。
通过这道题目的分析和解析,我们将帮助幼儿更好地理解足球,并提高他们的足球技巧。
题目描述这题目要求幼儿假设自己是一个足球裁判,在比赛过程中需要判断球场上发生的事件,包括球是否出界、球是否进门等。
题目分析1.首先,幼儿需要明确足球比赛的规则,包括球场的尺寸、球的大小、比赛时间等。
2.幼儿需要了解什么情况下球算出界,例如球完全越过界线即算出界。
3.幼儿需要了解什么情况下球算进门,例如球完全越过门线即算进门。
4.幼儿需要学会观察判断球是否出界或进门,例如看球是否完全越过界线或门线。
解题思路1.首先,幼儿需要明确足球比赛的规则。
他们可以通过观看足球比赛、与教练或其他儿童讨论来获得这些知识。
2.幼儿需要学会观察判断球是否出界或进门。
他们可以通过观察标志着界线或门线的边界,以及球是否完全越过这些线来判断球的状态。
3.对于判断球是否出界,幼儿可以注意以下几点:–观察球是否完全越过边界线,而不是仅仅挨着边界线滚动。
–观察球是否碰到了横杆或立柱,如果球完全越过边界线但碰到了横杆或立柱,也算出界。
4.对于判断球是否进门,幼儿可以注意以下几点:–观察球是否完全越过门线,并且进入了球门内部。
–观察球是否从门的上方进入,如果球越过门线但是从门的上方进入,是不算进门的。
5.幼儿应该提醒他们自己保持专注,仔细观察比赛过程中的细节。
心得体会通过这道题目,幼儿可以加深对足球规则和技巧的理解。
同时,他们也可以培养他们观察力和判断力,提高他们在比赛中作为裁判的能力。
此外,幼儿还可以通过练习判断球是否出界和进门,来提高他们的反应速度和足球技巧。
结论幼儿园足球题目是一个帮助幼儿理解足球规则和提高判断力的练习题。
通过观察和判断,幼儿可以学会区分球是否出界和进门。
这道题目不仅可以提高幼儿的足球技巧,还可以培养他们的观察力和判断力。
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题库-和数题⽬描述 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 }。
openjudge练习2参考解答
private int score;
public Student(String sno, int score) {
this.sno = sno;
this.score = score;
}
public String getSno() {
this.sname = sname;
}
public String getGanbu() {
return ganbu;
}
public void setGanbu(String ganbu) {
this.ganbu = ganbu;
}
public String getXibu() {
private String sno;
private int score;
public Student(String sno, int score) {
this.sno = sno;
this.score = score;
}
public String getSno() {
return s2.getScore()-s1.getScore();
}
});
for(Student student:students){
System.out.println(student.getSno());
}
}
}
class Student{
3班级排名
方法一:Student类实现Comparable接口
import java.util.ArrayList;
import java.util.Collections;
openjudge 24 单词长度
openjudge 24 单词长度摘要:一、问题背景1.介绍OpenJudge 平台2.问题编号243.问题主题:单词长度二、问题分析1.问题描述2.问题分析3.可能的解决方案三、算法设计与实现1.暴力枚举法2.动态规划法3.Trie 树4.算法比较与优化四、代码实现1.使用暴力枚举法实现2.使用动态规划法实现3.使用Trie 树实现4.代码性能测试与分析五、总结与展望1.问题总结2.算法优缺点分析3.对未来相关问题的展望正文:一、问题背景在编程竞赛和算法练习平台上,如LeetCode、牛客网等,经常会遇到一些有趣且具有一定挑战性的算法题目。
今天我们要探讨的是来自OpenJudge 平台的第24 题:单词长度。
该问题要求我们设计一个程序,输入一个字符串,输出其中单词的最大长度。
二、问题分析对于这个问题,首先需要明确什么是单词。
在英文中,单词是由空格分隔的连续字符。
给定一个字符串,我们需要找到其中最长的单词长度。
这个问题看似简单,但实际上需要我们设计一个高效的算法来解决。
三、算法设计与实现为了解决这个问题,我们可以尝试使用以下三种算法:1.暴力枚举法:遍历字符串的每一个字符,判断当前字符是否为单词的边界。
如果当前字符是边界,则更新单词长度。
这种方法时间复杂度为O(n^2),空间复杂度为O(1),其中n 为字符串长度。
2.动态规划法:我们可以用一个数组dp 来存储以每个字符结尾的单词长度。
这样,在遍历字符串的过程中,我们可以根据dp 数组快速判断当前字符是否为单词边界,并更新dp 数组。
时间复杂度为O(n),空间复杂度为O(n),其中n 为字符串长度。
3.Trie 树:利用Trie 树存储字符串中的所有单词,并记录每个节点的子节点数量。
这样,在遍历字符串的过程中,我们可以通过查询Trie 树来获取以当前字符结尾的单词长度。
时间复杂度为O(n),空间复杂度为O(n),其中n 为字符串长度。
OpenJudge1.5.27:级数求和
OpenJudge1.5.27:级数求和描述已知:Sn= 1+1/2+1/3+…+1/n。
显然对于任意⼀个整数K,当n⾜够⼤的时候,Sn⼤于K。
现给出⼀个整数K(1<=k<=15),要求计算出⼀个最⼩的n;使得Sn>K。
输⼊⼀个整数K。
输出⼀个整数n。
错误答案及解析:#include<cstdio>using namespace std;int main(){int i,k;float n=0.0,sn=0; //此处未注意数据范围应使⽤double型scanf("%d",&k);while(sn<=k){n+=1;sn+=1.0/n;}printf("%d",(int)n);return 0;}附:类型位范围char 1 个字节-128 到 127 或者 0 到 255unsigned char 1 个字节0 到 255signed char 1 个字节-128 到 127int 4 个字节-2147483648 到 2147483647unsigned int 4 个字节0 到 4294967295signed int 4 个字节-2147483648 到 2147483647short int 2 个字节-32768 到 32767unsigned short int2 个字节0 到 65,535signed short int 2 个字节-32768 到 32767long int8 个字节-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 signed long int8 个字节-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 unsigned long int8 个字节0 到 18,446,744,073,709,551,615float 4 个字节+/- 3.4e +/- 38 (~7 个数字)double8 个字节+/- 1.7e +/- 308 (~15 个数字)long double16 个字节+/- 1.7e +/- 308 (~15 个数字)wchar_t 2 或 4 个字节1 个宽字符正解:#include<cstdio>using namespace std;int main(){int i,k;double n=0.0,sn=0;scanf("%d",&k);while(sn<=k){n+=1;sn+=1.0/n;}printf("%d",(int)n);return 0;}。
南京大学厦门大学ACM百练算法设计与分析OpenJudge第六章习题解答
第6章课后作业结题报告第一题:给定n种物品和一个背包,物品i(1≤i≤n)的重量是wi,其价值为vi,背包的容量为C,对每种物品只有两种选择:装入背包或者不装入背包。
如何选择装入背包的物品,使得装入背包中物品的总价值最大?这是一道老生常谈的背包问题,属于入门dp(Dynamic Programming动态规划), 首先给出状态转移方程,设dp[i][j]表示用大小为j的背包去装前i个所能获得的最大价值, w[i]表示第i个物品的体积,v[i]表示第i个物品的价值。
关于第i个物品的决策,就是间单的”取与不取”,我们很容易得到如下的状态转移方程:dp[i][j]=max(dp[i-1][j], dp[i-1][j-w[i]]+v[i]);这边dp[i-1][j]表示第i个物品不取,dp[i-1][j-w[i]]+v[i]表示第i个物品取因为每次推导只用的到i-1维,我们其实可以只用一维的滚动数组就可以来求解。
这时候要逆序求解,这边不多做介绍接下来是打印路径问题,这个需要逆序贪心打印。
第i个背包是否选取应该用dp[i][V]与dp[i-1][V]来比较,从而求解,dp[i][V]>dp[i-1][V],V表示当前可存在的最大容量。
根据贪心,容量V越大价值同样装前i个一定更优,后面的推导的正解一定是基于dp[i][V]的,所以可以这么选标程如下:#include <stdio.h>#include <algorithm>using namespace std;int dp[110][1010];int n, c, ans[110];int w[110], v[110];void print(){int i, j, k;k=c;for(i=n; i>=1; i--){if(dp[i][k]!=dp[i-1][k]){ans[i]=1;k=k-w[i];}else{}}return;}int main(){int i, j, k;scanf("%d%d", &n, &c);for(i=1; i<=n; i++){scanf("%d%d", &w[i], &v[i]);}for(i=1; i<=n; i++){for(j=1; j<=c; j++){dp[i][j]=dp[i-1][j];if(j>=w[i]){dp[i][j]=max(dp[i-1][j-w[i]]+v[i], dp[i][j]);}}}printf("%d\n", dp[n][c]);print();for(i=1; i<=n; i++) {printf("%d\n", ans[i]);}return 0;}第二题:设有n种不同面值的硬币,各硬币的面值存于数组T[1:n]中。
《算法设计与分析实用教程》习题参考解答
《算法设计与分析实用教程》习题参考解答《算法设计与分析实用教程》参考解答1-1 加减得1的数学游戏西西很喜欢数字游戏,今天他看到两个数,就想能否通过简单的加减,使最终答案等于1。
而他又比较厌烦计算,所以他还想知道最少经过多少次才能得到1。
例如,给出16,9:16-9+16-9+16-9-9-9+16-9-9=1,需要做10次加减法计算。
设计算法,输入两个不同的正整数,输出得到1的最少计算次数。
(如果无法得到1,则输出-1)。
(1)若输入两个不同的正整数a,b均为偶数,显然不可能得到1。
设x*a与y*b之差为“1”或“-1”,则对于正整数a,b经n=x+y-1次加减可得到1。
为了求n的最小值,令n从1开始递增,x在1——n中取值,y=n+1-x:检测d=x*a+y*b,若d=1或-1,则n=x+y-1为所求的最少次数。
(2)算法描述// 两数若干次加减结果为1的数学游戏#includevoid main(){long a,b,d,n,x,y;printf(" 请输入整数a,b: ");scanf("%ld,%ld",&a,&b);if(a%2==0 && b%2==0){ printf(" -1\n");return;}n=0;while(1){ n++;for(x=1;x<=n;x++){ y=n+1-x;d=x*a-y*b;if(d==1 || d==-1) // 满足加减结果为1{ printf(" n=%ld\n",n);return;}}}}请输入整数a,b: 2012,19961请输入整数a,b: 101,20136061-2 埃及分数式算法描述分母为整数分子为“1”的分数称埃及分数,试把真分数a/b 分解为若干个分母不为b 的埃及分数之和。
(1)寻找并输出小于a/b 的最大埃及分数1/c ;(2)若c>900000000,则退出;(3)若c ≤900000000,把差a/b-1/c 整理为分数a/b ,若a/b 为埃及分数,则输出后结束。
openjudge答案
openjudge答案【篇一:整理的-----acm题目及答案】a + b problem (4)1001 sum problem (5)1002 a + b problem ii (6)1005 number sequence (8)1008 elevator (9)1009 fatmouse trade (11)1021 fibonacci again (13)1089 a+b for input-output practice (i) (14)1090 a+b for input-output practice (ii) (15)1091 a+b for input-output practice (iii) (16)1092 a+b for input-output practice (iv) (17)1093 a+b for input-output practice (v) (18)1094 a+b for input-output practice (vi) (20)1095 a+b for input-output practice (vii) (21)1096 a+b for input-output practice (viii) (22)1176 免费馅饼 (23)1204 糖果大战 (25)1213 how many tables (26)2000 ascii码排序 (32)2001 计算两点间的距离 (34)2002 计算球体积 (35)2003 求绝对值 (36)2004 成绩转换 (37)2005 第几天? (38)2006 求奇数的乘积 (40)2007 平方和与立方和 (41)2008 数值统计 (42)2009 求数列的和 (43)2010 水仙花数 (44)2011 多项式求和 (46)2012 素数判定 (47)2014 青年歌手大奖赛_评委会打分 (49)2015 偶数求和 (50)2016 数据的交换输出 (52)2017 字符串统计 (54)2019 数列有序! (55)2020 绝对值排序 (56)2021 发工资咯:) (58)2033 人见人爱a+b (59)2037 今年暑假不ac (61)2039 三角形 (63)2040 亲和数 (64)2045 不容易系列之(3)—— lele的rpg难题 (65)2049 不容易系列之(4)——考新郎 (66)2056 rectangles (68)2073 无限的路 (69)2084 数塔 (71)2201 熊猫阿波的故事 (72)2212 dfs (73)2304 electrical outlets (74)2309 icpc score totalizer software (75)2317 nasty hacks (77)2401 baskets of gold coins (78)2500 做一个正气的杭电人 (79)2501 tiling_easy version (80)2502 月之数 (81)2503 a/b + c/d (82)2504 又见gcd (83)2519 新生晚会 (84)2520 我是菜鸟,我怕谁 (85)2521 反素数 (86)2522 a simple problem (88)2523 sort again (89)2524 矩形a + b (90)2535 vote (91)2537 8球胜负 (93)2539 点球大战 (95)2547 无剑无我 (98)2548 两军交锋 .............................................................. 99 2549 壮志难酬 ............................................................. 100 2550 百步穿杨 ............................................................. 101 2551 竹青遍野 ............................................................. 103 2552 三足鼎立 ............................................................. 104 2553 n皇后问题 ............................................................ 105 2554 n对数的排列问题 ...................................................... 106 2555 人人都能参加第30届校田径运动会了 .................................... 107 2560buildings ............................................................ 110 2561 第二小整数 ........................................................... 112 2562 奇偶位互换 ........................................................... 113 2563 统计问题 ............................................................. 114 2564 词组缩写 ............................................................. 115 2565 放大的x .............................................................. 117 2566 统计硬币 ............................................................. 118 2567 寻梦 ................................................................. 119 2568 前进 ................................................................. 121 2569 彼岸 (123)2700 parity ............................................................... 124 2577 how to type . (126)北京大学:1035 spell checker ........................................................ 129 1061 青蛙的约会 ........................................................... 133 1142 smith numbers ........................................................ 136 1200 crazy search ......................................................... 139 1811 primetest ........................................................... 141 2262 goldbachs conjecture ................................................ 146 2407relatives ............................................................ 150 2447rsa .................................................................. 152 2503babelfish ............................................................ 156 2513 colored sticks . (159)acm算法:kurxx最小生成树 (163)prim ....................................................................... 164 堆实现最短路 ............................................................... 166 最短路dij普通版 (167)floyd (168)bell_man ................................................................... 168 拓扑排序 ................................................................... 169 dfs强连通分支 .............................................................. 170 最大匹配 ................................................................... 172 还有两个最大匹配模板 ....................................................... 173 最大权匹配,km算法 .......................................................... 175 两种欧拉路 (177)无向图: ............................................................... 177 有向图: (178)【最大流】edmonds karp (178)dinic (179)【最小费用最大流】edmonds karp对偶算法 (181)acm题目:【题目】排球队员站位问题 (182)【题目】把自然数N分解为若干个自然数之和。
OpenJudge 计算概论基础练习(二)
OpenJudge 计算概论基础练习(二)1:苹果和虫子/hw02/1/总时间限制:1000ms内存限制:65536kB描述你买了一箱n个苹果,很不幸的是买完时箱子里混进了一条虫子。
虫子每x小时能吃掉一个苹果,假设虫子在吃完一个苹果之前不会吃另一个,那么经过y小时你还有多少个完整的苹果?输入输入仅一行,包括n,x和y(均为整数)。
输出输出也仅一行,剩下的苹果个数提示注意:是要求完整的苹果数。
2:大象喝水/hw02/2/总时间限制:1000ms内存限制:65536kB描述一只大象口渴了,要喝20升水才能解渴,但现在只有一个深h厘米,底面半径为r厘米的小圆桶(h和r都是整数)。
问大象至少要喝多少桶水才会解渴。
(设PAI=3.14159)输入输入有一行:分别表示小圆桶的深h,和底面半径r,单位都是厘米。
输出输出也只有一行,大象至少要喝水的桶数。
3:最高的分数/hw02/3/总时间限制:1000ms内存限制:65536kB描述孙老师讲授的《计算概论》这门课期中考试刚刚结束,他想知道考试中取得的最高分数。
因为人数比较多,他觉得这件事情交给计算机来做比较方便。
你能帮孙老师解决这个问题吗?输入输入为二行,第一行为整数n(1 <= n < 100),表示参加这次考试的人数.第二行是这n个学生的成绩输出输出一行,即最高的成绩提示不用数组和使用数组均可实现4:最大奇数与最小偶数之差的绝对值/hw02/4/总时间限制:1000ms内存限制:65536kB描述输入6个正整数,且这6个正整数中至少存在一个奇数和一个偶数。
设这6个正整数中最大的奇数为a,最小的偶数为b,求出|a-b|的值输入输入为一行,6个正整数,且6个正整数都小于100输入保证这6个数中至少存在一个奇数和一个偶数输出输出为一行,输出最大的奇数与最小的偶数之差的绝对值5:分离整数的各个数位/hw02/5/总时间限制:1000ms内存限制:65536kB描述从键盘输入一个任意的三位整数,要求正确地分离出它的百位、十位和个位数,并分别在屏幕上输出,输出采用每行输出一个数的方式,不带其它符号。
算法设计与分析-课后习题集答案
第一章3. 最大公约数为1。
快1414倍。
程序1-2的while 循环体做了10次,程序1-3的while 循环体做了14141次(14142-2循环)8.(1)画线语句的执行次数为log n ⎡⎤⎢⎥。
(log )n O 。
(2)画线语句的执行次数为111(1)(21)16jnii j k n n n ===++=∑∑∑。
3()n O 。
(3)画线语句的执行次数为。
O 。
(4)当n 为奇数时画线语句的执行次数为(1)(1)4n n +-, 当n 为偶数时画线语句的执行次数为 (2)4n n +。
2()n O 。
10.(1) 当 1n ≥ 时,225825n n n -+≤,所以,可选 5c =,01n =。
对于0n n ≥,22()5825f n n n n =-+≤,所以,22582()-+=O n n n 。
(2) 当 8n ≥ 时,2222582524n n n n n -+≥-+≥,所以,可选 4c =,08n =。
对于0n n ≥,22()5824f n n n n =-+≥,所以,22582()-+=Ωn n n 。
(3) 由(1)、(2)可知,取14c =,25c =,08n =,当0n n ≥时,有22212582c n n n c n ≤-+≤,所以22582()-+=Θn n n 。
11. (1) 当3n ≥时,3log log n n n <<,所以()20log 21f n n n n =+<,3()log 2g n n n n =+>。
可选212c =,03n =。
对于0n n ≥,()()f n cg n ≤,即()(())f n g n =O 。
(2) 当 4n ≥ 时,2log log n n n <<,所以 22()/log f n n n n =<,22()log g n n n n =≥。
可选 1c =,04n =。
OpenJudge2746约瑟夫问题1
OpenJudge2746约瑟夫问题11 #include<stdio.h>2 typedef struct Node3 {4int data;5 Node *next;6 Node(int i){ //Node函数7 data=i;8 next=NULL;9 }10 }node;11int main()12 {13int i,m,n;14 node *head,*p,*q;15while(scanf("%d%d",&n,&m),m||n)16 {17if(m==1) //这点需要注意,m==1时,特殊情况18 {19 printf("%d\n",n);20continue;21 }22 head=new Node(1);//初始化23for(p=head,i=2;i<=n;i++)// 正序输⼊链表元素24 {25 q=new Node(i);//初始化26 q->next=p->next;27 p->next=q;28 p=q;29 }30 p->next=head;//构造循环链表,实现⾸尾相连31for(p=head;p->next!=p;p=p->next)//删除m的元素32 {33for(i=1;i<m-1;i++)34 p=p->next;35 q=p->next;36 p->next=q->next;37 delete q;38 }#include<stdio.h>39 typedef struct Node40 {41int data;42 Node *next;43 Node(int i){ //Node函数44 data=i;45 next=NULL;46 }47 }node;48int main()49 {50int i,m,n;51 node *head,*p,*q;52while(scanf("%d%d",&n,&m),m||n)53 {54if(m==1) //这点需要注意,m==1时,特殊情况55 {56 printf("%d\n",n);57continue;58 }59 head=new Node(1);//初始化60for(p=head,i=2;i<=n;i++)// 正序输⼊链表元素61 {62 q=new Node(i);//初始化63 q->next=p->next;64 p->next=q;65 p=q;66 }67 p->next=head;//构造循环链表,实现⾸尾相连68for(p=head;p->next!=p;p=p->next)//删除m的元素69 {70for(i=1;i<m-1;i++)71 p=p->next;72 q=p->next;73 p->next=q->next;74 delete q;75 }76 printf("%d\n",p->data);77 }78return0;79 }808182 printf("%d\n",p->data);83 }84return0;85 }861.第⼀种⽅法:分析:设⼀个包括m个元素的数组,初始值将数组的每个元素放1。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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]; } }