导航菜单
首页 >  acm真题  > acm试题

acm试题

最近参加了学校组织的acm大赛,当然我没有把所有的题做出来,我们宿舍分别做出了不同的题,我在此收集了一下,现在把题目和答案放给大家。 1.

任务描述 本关任务:编写程序,将一个键盘输入的正整数分解质因数

编程要求 测试输入:90;

预期输出: 90=2* 3* 3* 5 上面这个预期结果没有空格,是因为csdn这个编辑器没法显示原格式我手动加的

代码如下: package com.educoder.competition;import java.util.*;public class Case1 {public static void main(String[] args) {Scanner s = new Scanner(System.in);int n = s.nextInt();/********** Begin *********/System.out.print(n + "=");for (int k = 2; k if (n % k == 0) {System.out.print(k + "*");n = n / k;} else {break;}}}System.out.println(n);/********** End *********/}} 2.

任务描述 在循环中,只要除数不等于 0 ,用较大数除以较小的数,将小的一个数作为下一轮循环的大数,取得的余数作为下一轮循环的较小的数,如此循环直到较小的数的值为 0 ,返回较大的数,此数即为最大公约数,最小公倍数为两数之积除以最大公约数。

测试输入:6 9;

预期输出:

最大公约数: 3 最小公倍数: 18

代码如下: package com.educoder.competition;import java.util.*;public class Case2 {public static void main(String[] args) {int a, b;Scanner s = new Scanner(System.in);a = s.nextInt();b = s.nextInt();/********** Begin *********/System.out.println("最大公约数: "+gcd(a,b));System.out.println("最小公倍数: "+lcm(a, b));/********** End *********/}public static int gcd(int p, int q){if(q == 0) {return p;}while(p%q != 0){int r = p % q;p = q;q = r;}return q;}public static int lcm(int p, int q) {int p1 = p;int q1 = q;while (q != 0) {int r = p % q;p = q;q = r;}return (p1 * q1) / p;}} 3.

任务描述 本关任务:已经两个输入参数,第一个参数为任意数字串,第二个参数为该字符串进制,要求把任意进制的数值将其转换为十进制数输出。

提示:使用Integer.valueOf(String,int)方法。

测试输入:25 6;

预期输出:17;

代码如下: package com.educoder.competition;import java.util.Scanner;public class Case3 {public static void main(String args[]) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int m = sc.nextInt();/********** Begin *********/String str =String.valueOf(n);int result=Integer.valueOf(str, m);System.out.println(result);/********** End *********/}} 4.

任务描述 本关任务:从输入参数接收一个 7 位以上的正整数,取这个正整数从右端开始的 4 ~ 7 位。当输入参数少于7位,则提示输入错误!。

测试输入:324564487;

预期输出:4564;

测试输入:3245;

预期输出:输入错误!;

代码如下: package com.educoder.competition;import java.util.*;public class Case4 {public static void main(String[] args) {Scanner scan = new Scanner(System.in);long l = scan.nextLong();String str = Long.toString(l);char[] ch = str.toCharArray();int n = ch.length;if (n Scanner s = new Scanner(System.in);String s1 = s.nextLine();/********** Begin *********/char[] ch = s1.toCharArray();char a1=ch[0];for(int i=1;iSystem.out.print(a1);}else {System.out.println(a1);}a1=ch[i];}if((ch[ch.length-2]+1)!=ch[ch.length-1]) {System.out.println(ch[ch.length-1]);}else {System.out.print(ch[ch.length-1]);System.out.println();}/********** End *********/}} 6.

任务描述 在实际的开发工作中,对字符串的处理是最常见的编程任务。本题目要求编写程序对用户输入的串进行处理。处理具体规则如下:

把每个单词的首字母变为大写。 把数字与字母之间用下划线字符(_)分开,使得更清晰 把单词中间有多个空格的调整为1个空格 假设:用户输入的串中只有小写字母,空格和数字,不含其它的字母或符号,每个单词间由1个或多个空格分隔。

测试输入:you and me what cpp2005program;

预期输出:You And Me What Cpp_2005_program;

代码如下:

版本一: 这个版测试结果都符合预期,但无法提交。

package demo;import java.util.Scanner;import java.util.StringTokenizer;public class Case6 {public static void main(String[] args) {Scanner cin=new Scanner(System.in);String s=cin.nextLine();String []a=new String [100];int t=0;StringTokenizer st = new StringTokenizer(s," ");while(st.hasMoreElements()) {a[t]=(String) st.nextElement();t++;}for (int i=0;ichar b=a[i].charAt(j);char c=a[i].charAt(j+1);if((Character.isDigit(b)&&Character.isLetter(c))||(Character.isDigit(c)&&Character.isLetter(b))){a[i]=a[i].substring(0,j+1)+"_"+a[i].substring(j+1);}}System.out.print(a[i]+" ");}cin.close();}}

版本二: 这个可以正常提交。

package com.educoder.competition;import java.util.Scanner;import java.util.regex.Matcher;import java.util.regex.Pattern;public class Case6 {public static void main(String[] args) {Scanner scan = new Scanner(System.in);String s = scan.nextLine();/********** Begin *********/String ss=s.trim();char [] ch=ss.toCharArray();if(ch[0]!=' ')System.out.print(Character.toUpperCase(ch[0]));for(int i=1;icontinue;}else if(ch[i-1]==' '){if(ch[i]!=' '){System.out.print(' ');}System.out.print(Character.toUpperCase(ch[i]));}else{System.out.print(ch[i]);if((i+1=48&&(ch[i+1]+0)System.out.print('_');}}}System.out.println();/********** End *********/}} 7.

任务描述 今天是 2018 年 12 月 2 日,星期日。这天小明和爸爸 妈妈去公园玩了一天。他想:这个月什么时候才能再和爸爸妈妈一起出来玩呢?

小明的爸爸妈妈工作很忙,只有在休息的时候才能陪他一起玩。爸爸每工作 4 天休息一天,妈妈每工作 3 天休息一天;小明每上学 5 天休息 2 天.

你那个帮他算出来吗?

该题以 yyyy-MM-dd 格式输入一个当前一起玩的日期;

输出下次玩的日期,格式: yyyy-MM-dd 。

测试输入:2018-12-02;

预期输出:2018-12-22;

代码如下: package com.educoder.competition;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.Scanner;public class Case7 {public static void main(String[] f) throws ParseException {Scanner sc = new Scanner(System.in);String aString = sc.nextLine();/********** Begin *********/String[] sp1= aString.split("-");Calendar c1=Calendar.getInstance();c1.set(Calendar.YEAR, Integer.parseInt(sp1[0]));c1.set( Calendar.MONTH, Integer.parseInt(sp1[1])-1);c1.set(Calendar.DATE, Integer.parseInt(sp1[2]));c1.add(Calendar.DATE, 20);int m=(c1.get(Calendar.MONTH)+1);int d=c1.get(Calendar.DATE);String MONTH1=m/********** Begin *********/BigInteger sum =new BigInteger("0");BigInteger js =new BigInteger("2");for(int i=0;ipublic static void main(String[] args) {//运动员人数Scanner sc = new Scanner(System.in);int n = sc.nextInt();/********** Begin *********/if (n % 8 == 0) {int count=n/8;for (int i = 0; i int zs = n / 8 + 1;int ren = n / zs;int ren1 = n - ren*zs;for (int j = 0; j System.out.print(ren + 1 );} else {System.out.print(ren );}System.out.println();}}/********** End *********/}} 10.

任务描述 方阵的主对角线之上称为“上三角”。请设计一个用于填充n阶方阵的上三角区域的程序。填充的规则是:使用1,2,3….的自然数列,从左上角开始,按照顺时针方向螺旋填充。

输入参数为整数 n(3~10)

程序输出:方阵的上三角部分。

要求格式:每个数据宽度为 4 ,右对齐

测试输入:3;

预期输出:

123645

测试输入:4;

预期输出:

12349 105867 代码如下: package com.educoder.competition;import java.util.Scanner;public class Case10 {public static void main(String[] args) {Scanner scan = new Scanner(System.in);int n = scan.nextInt();/********** Begin *********/show(f(n));/********** End *********/}static void show(int[][]x){for(int i=0;iif(x[i][j]!=0)System.out.print(String.format("%4d",x[i][j]));}System.out.println();}}static int[][] f(int m){//开一个二维数组int[][] a=new int[m][m];int w=1;int r=0;int c=0;L1:while(true){//向下for(;;){//最大的w不能超过二维数组长度减去含0的数字if(w>m*m-g(m)) break L1;a[r][c++] = w++;if(c==m|| a[r][c]>0) break; }c--;c--;r++;//向左下for(;;){if(w>m*m-g(m)) break L1;a[r++][c--]=w++;if(r==m||c0) break;}c++;r--;r--;//向上for(;;){if(w>m*m-g(m)) break L1;a[r--][c]=w++;if(r0) break;}r++;c++;}return a;}//数组里为0的个数static int g(int m){int count = 0;for(int i=0;icount++;}}return count;}}

相关推荐: