【ACM】P2020、P2021、P2022、P2023、P2024代码演示
2017-05-16 09:14
555 查看
【P2020问题概述】绝对值排序 :
/*** 绝对值排序 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 79949 Accepted Submission(s): 38091 Problem Description 输入n(n<=100)个整数,按照绝对值从大到小排序后输出。题目保证对于每一个测试实例,所有的数的绝对值都不相等。 Input 输入数据有多组,每组占一行,每行的第一个数字为n,接着是n个整数,n=0表示输入数据的结束,不做处理。 Output 对于每个测试实例,输出排序后的结果,两个数之间用一个空格隔开。每个测试实例占一行。 Sample Input 3 3 -4 2 4 0 1 2 -3 0 Sample Output -4 3 2 -3 2 1 0 Author lcy */
代码演示:
package ac; import java.util.Arrays; import java.util.Scanner; public class P2020{ public static void main(String[] args) { Scanner sc=new Scanner(System.in ); while(sc.hasNext()){ //接收n int n=sc.nextInt(); if(n==0){ break; } //new 原数组 int[] a=new int ; for(int i=0;i<a.length;i++){ a[i]=sc.nextInt(); } //new 绝对值后的数组 int[] b =new int ; for(int i=0;i<b.length;i++){ if(a[i]<0){ b[i]=Math.abs(a[i]); }else{ b[i]=a[i]; } } //排序绝对值数组 Arrays.sort(b); //从原数组中找到与绝对值数组中对应的数值 for(int i=0;i<b.length;i++){ for(int j=0;j<a.length;j++){ if(-a[j]==b[i]){ b[i]=a[j]; } } } //打印出整个数组 for(int i=b.length-1;i>=0;i--){ if(i==b.length-1){ System.out.print(b[i]); }else{ System.out.print(" "+b[i]); } } System.out.println(); } } }
【P2021问题概述】发工资咯:)
/** * 发工资咯:) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 61443 Accepted Submission(s): 33152 Problem Description 作为杭电的老师,最盼望的日子就是每月的8号了,因为这一天是发工资的日子,养家糊口就靠它了,呵呵 但是对于学校财务处的工作人员来说,这一天则是很忙碌的一天,财务处的小胡老师最近就在考虑一个问题:如果每个老师的工资额都知道,最少需要准备多少张人民币,才能在给每位老师发工资的时候都不用老师找零呢? 这里假设老师的工资都是正整数,单位元,人民币一共有100元、50元、10元、5元、2元和1元六种。 Input 输入数据包含多个测试实例,每个测试实例的第一行是一个整数n(n<100),表示老师的人数,然后是n个老师的工资。 n=0表示输入的结束,不做处理。 Output 对于每个测试实例输出一个整数x,表示至少需要准备的人民币张数。每个输出占一行。 Sample Input 3 1 2 3 0 Sample Output 4 Author lcy Source C语言程序设计练习(四) */
代码演示:
package ac; import java.util.Scanner; public class P2021 { public static void main(String[] args) { Scanner sc=new Scanner(System.in ); //可以有多测试实例用while while(sc.hasNext()){ //接收数据n int n=sc.nextInt(); if(n==0){ break; } //用数组接收n个数据 int[] a=new int ; int count=0; for(int i=0;i<a.length;i++){ a[i]=sc.nextInt(); //依次对百位、十位、个位的数字进行判断,确定每个位置上的总数 int x=a[i]/100; int y=a[i]%100/10; int z=a[i]%100%10; if(y>5){ y=1+y-5; }else if(y==5){ y=1; } if(z>5){ z=1+ ((z-5)%2==0?(z-5)/2:1+(z-5)/2); }else if(z<5){ z=z%2==0?z/2:z/2+1; }else{ z=1; } count+=x+y+z; //System.out.println(x+","+y+","+z); } System.out.println(count); } } }
【P2022问题概述】海选女主角:
/** * 海选女主角 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 62591 Accepted Submission(s): 27633 Problem Description potato老师虽然很喜欢教书,但是迫于生活压力,不得不想办法在业余时间挣点外快以养家糊口。 “做什么比较挣钱呢?筛沙子没力气,看大门又不够帅...”potato老师很是无奈。 “张艺谋比你还难看,现在多有钱呀,听说还要导演奥运开幕式呢!你为什么不去娱乐圈发展呢?”lwg在一旁出主意。 嗯,也是,为了生存,就委屈点到娱乐圈混混吧,马上就拍一部激光电影《杭电记忆——回来我的爱》。 说干就干,马上海选女主角(和老谋子学的,此举可以吸引媒体的眼球,呵呵),并且特别规定,演员必须具有ac的基本功,否则直接out! 由于策划师风之鱼(大师级水王)宣传到位,来应聘的MM很多,当然包括nit的蛋糕妹妹等呼声很高的美女,就连zjut的jqw都男扮女装来应聘(还好被安全顾问hdu_Bin-Laden认出,给轰走了),看来娱乐圈比acm还吸引人哪... 面试那天,刚好来了m*n个MM,站成一个m*n的队列,副导演Fe(OH)2为每个MM打了分数,分数都是32位有符号整数。 一开始我很纳闷:分数怎么还有负的?Fe(OH)2解释说,根据选拔规则,头发染成黄色、化妆太浓、穿的太少等等都要扣分数的,扣的多了就可能是负分了,当然,如果发现话语中夹有日语,就直接给-2147483648分了。 分数送上来了,是我做决定的时候了,我的一个选拔原则是,要选一个面试分数绝对值(必须还是32位整数)最大的MM。 特别说明:如果不幸选中一个负分的MM,也没关系,因为我觉得,如果不能吸引你,那要想法恶心你。 Input 输入数据有多组,每组的第一行是两个整数m和n,表示应聘MM的总共的行列数,然后是m行整数, 每行有n个,m和n的定义见题目的描述。 Output 对于每组输入数据,输出三个整数x,y和s,分别表示选中的MM的行号、列号和分数。 note:行号和列号从一开始,如果有多个MM的分数绝对值一样,那么输出排在最前面的一个 (即行号最小的那个,如果行号相同则取列号最小的那个)。 Sample Input 2 3 1 4 -3 -7 3 0 Sample Output 2 1 -7 Author lcy */
代码演示:
package ac; import java.util.Scanner; /** * *@author <a"283505495@qq.com">lxd</a> *@version 1.0 2017-5-18 上午8:26:25 *@fileName P2022.java */ public class P2022 { public static void main(String[] args) { Scanner sc=new Scanner(System.in); //输入数据有多组实例 while(sc.hasNext()){ //接收m,n int m=sc.nextInt(); int n=sc.nextInt(); //接收m行n列数据到a数组中 int[][] a=new int[m] ; //初始化max,位置(mi,mj) int max=a[0][0]; int mi=0,mj=0; for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ a[i][j]=sc.nextInt(); //利用绝对值比较 if(Math.abs(a[i][j])>max){ max=Math.abs(a[i][j]); mi=i; mj=j; } } } System.out.println((mi+1)+" "+(mj+1)+" "+a[mi][mj]); } } }
【P2023问题概述】:求平均成绩
/** * 求平均成绩 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 124329 Accepted Submission(s): 28436 Problem Description 假设一个班有n(n<=50)个学生,每人考m(m<=5)门课,求每个学生的平均成绩和每门课的平均成绩, 并输出各科成绩均大于等于平均成绩的学生数量。 Input 输入数据有多个测试实例,每个测试实例的第一行包括两个整数n和m,分别表示学生数和课程数。 然后是n行数据,每行包括m个整数(即:考试分数)。 Output 对于每个测试实例,输出3行数据,第一行包含n个数据,表示n个学生的平均成绩,结果保留两位小数; 第二行包含m个数据,表示m门课的平均成绩,结果保留两位小数;第三行是一个整数, 表示该班级中各科成绩均大于等于平均成绩的学生数量。 每个测试实例后面跟一个空行。 Sample Input 2 2 5 10 10 20 Sample Output 7.50 15.00 7.50 15.00 1 Author lcy */
代码演示:
package ac; import java.util.Scanner; public class P2023{ public static void main(String[] args) { Scanner sc=new Scanner(System.in); while(sc.hasNext()){ int n=sc.nextInt(); int m=sc.nextInt(); double[][] a=new double[n+2][m+1]; //int[][] a=new int[n+2][m+1]; for(int i=0;i<a.length-2;i++){ for(int j=0;j<a[i].length-1;j++){ a[i][j]=sc.nextInt(); //n个学生的总成绩 a[i][a[i].length-1]+=a[i][j];//注意此处遇到过一个坑:a[i][a.length-1]+=a[i][j]; //m科总成绩 a[a.length-2][j]+=a[i][j]; //m科平均成绩 a[a.length-1][j]=a[a.length-2][j]/(i+1); } } //打印出n个学生的成绩 for(int i=0;i<a.length-2;i++){ if(i==0){ System.out.print(""); }else{ System.out.print(" "); } System.out.printf("%.2f",a[i][a[i].length-1]/m); } System.out.println(); //打印出m个平均成绩 for(int j=0;j<a[0].length-1;j++){ if(j==0){ System.out.print(""); }else{ System.out.print(" "); } System.out.printf("%.2f",a[a.length-1][j]); } System.out.println(); /**打印出高于平均成绩的人数count 思路: 统计每科高于平均成绩的科目数k,如果k==m,则count++ */ int count=0; for(int ii=0;ii<a.length-2;ii++){ int k=0; for(int j=0;j<a[ii].length-1;j++){ if(a[ii][j]>=a[a.length-1][j]){ k++; } } if(k==m){ count=count+1; } } System.out.println(count); System.out.println(); } } }
运行结果:
[P2024问题概述]:C语言合法标识符
/** * C语言合法标识符 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 72031 Accepted Submission(s): 27939 Problem Description 输入一个字符串,判断其是否是C的合法标识符。 Input 输入数据包含多个测试实例,数据的第一行是一个整数n,表示测试实例的个数,然后是n行输入数据,每行是一个长度不超过50的字符串。 Output 对于每组输入数据,输出一行。如果输入数据是C的合法标识符,则输出"yes",否则,输出“no”。 Sample Input 3 12ajf fi8x_a ff ai_2 Sample Output no yes no Author lcy * */
代码演示:
package ac; import java.util.Scanner; public class P2024{ public static void main(String[] args) { Scanner sc=new Scanner(System.in); //接收所测试的行数 int n=sc.nextInt(); //吸收多余的输入 sc.nextLine(); //判断n行字符串 for(int j=0;j<n;j++){ //接收字符串 String str=sc.nextLine(); //处理字符 char[] chs=str.toCharArray(); //是否为标记符 boolean flag=false; char ch=str.charAt(0); //判断第一个字符是否符合规则 if(ch>='a'&&ch<='z'|| ch>='A'&&ch<='Z'||ch=='_' ){ //判断n-1个字符是否符合规则 for(int i=1;i<chs.length;i++){ if(chs[i]>='a'&&chs[i]<='z'|| chs[i]>='A'&&chs[i]<='Z'|| chs[i]>='0'&&chs[i]<='9'|| chs[i]=='_' ){ flag=true; continue; //System.out.print("【"+chs[i]+"】"); }else{ flag=false; break; //System.out.print("《"+chs[i]+"》"); } } }else{ flag=false; } //按照flag值输出判断结果 if(flag){ System.out.println("yes"); }else{ System.out.println("no"); } } } }
相关文章推荐
- 【ACM】P2000、P2001、P2002、P2003、P2004、P2005代码演示
- 【ACM】P2011、P2012、P2013(*)、P2014代码演示
- HDU 水题 2019 2020 2021 2022 2023 2024 2025 2026 2027
- 【ACM】P2015(*)、P2016、P2017、P2018(*)、P2019代码演示
- 【ACM】P2006、P2007、P2008、P2009、P2010代码演示
- 【ACM】P2030、P2031、P2032、P2033、P2034代码演示
- 【ACM】P1000、P10001、P1002、P1003代码演示
- 【ACM】P2025、P2026、P2027、P2028、P2029代码演示
- 演示Session对象使用 范例(示例代码下载)
- XMLHttp的演示与代码示例
- 演示Session对象使用 范例(示例代码下载)
- [XNA研究强烈推荐]XNA开发雷电类游戏,源代码提供下载学习(提供代码和视频演示)
- 农历一百年算法(1921~2021)【C语言代码】
- Interlocking Tile LOD算法演示(包括部分代码)
- 一个简单的态机模式工作流演示(2)(代码与实现)
- 演示事件(Event)怎样使用以及怎样为用户控件添加一个事件(示例代码下载)
- ACM代码总结
- SQL2005常见性能问题排错演示代码[收藏]
- 两首歌曲的汇编演示(发声代码)...
- 【原创】DOS下TSR程序的汇编演示代码2--黑屏保护程序