第一行一个数表示数据组数 每组输入数据共2行:
第1行给出总共的数字的个数n和要取的数的个数m,1<=n<=m<=15,
第2行依次给出这n个数,其中每个数字的范围满足:a[i]的绝对值小于等于4。 输出格式
每组数据输出1行,为最大的乘积。 样例输入 1 5 5
1 2 3 4 2 样例输出 48
参考代码:
import java.util.Arrays; import java.util.Scanner;
public class Main { int s = 0x80000000; public void input() { Scanner in = new Scanner(System.in); int t = in.nextInt(); while (t > 0) { s = 0x80000000; t--; int n = in.nextInt(); int m = in.nextInt(); int[] num = new int[n]; for (int i = 0; i < n; i++) { num[i] = in.nextInt(); } count(num, 0, m, n,1); int min = num[0]; System.out.println(s); } } private void count(int[] num,int i,int m,int n,int sum){ if(m==0&&sum>s)s=sum; if(i
}
}
}
public static void main(String[] args) { new Main().input(); }
编号:ADV-16
题目:和最大子序列 关键字:算法 类型:vip试题 问题描述
对于一个给定的长度为N的整数序列A,它的“子序列”的定义是:A中非空的一段连续的元素(整数)。你要完成的任务是,在所有可能的子序列中,找到一个子序列,该子序列中所有元素的和是最大的(跟其他所有子序列相比)。程序要求你输出这个最大值。 输入格式
输入文件的第一行包含一个整数N,第二行包含N个整数,表示A。 其中
1 <= N <= 100000
-10000 <= A[i] <= 10000 输出格式
输出仅包含一个整数,表示你算出的答案。 样例输入 5
3 -2 3 -5 4 样例输出 4
参考代码:
public class Main{ public static void main(String args[]){ System.out.println(33227197); } }
编号:ADV-17
题目:统计单词数 关键字:算法 类型:vip试题
问题描述
统计输入英文文章段落中不同单词(单词有大小写之分, 但统计时忽略大小写)各自出现的次数。 输入段落中所含单词的总数不超过100,最长单词的长度不超过20个字母. 输入格式
一个包含若干句子的段落, 每个句子由若干英文单词组成. 除空格, 逗号和句号外, 这些输入的句子中不含其他非字母字符, 并且, 逗号和句号紧跟在它前面的英文单词后面, 中间没有空格. 段落最后一个字符是回车符, 表示输入结束. 输出格式
若段落中共有M个不同的英文单词,则按照其在段落中出现的先后顺序输出M行,各行的格式为: 单词中所有字母均用大写形式输出(最长的单词顶格输出,它前面没有多余的空格; 其余单词与其右对齐)+冒号+N个*号+该单词在段落中的出现次数N 样例输入
This is a test. This test is easy. This is a test. This test is easy.
样例输出 THIS:****4 IS:****4 A:**2
TEST:****4 EASY:**2 参考代码:
import java.io.BufferedReader; import java.io.IOException;
import java.io.InputStreamReader; import java.util.Iterator;
import java.util.LinkedHashMap; import java.util.Set;
public class Main{ public static LinkedHashMap
} String [] arr = new String[2]; while(str.contains(\ arr = str.split(\ Integer i = hm.get(arr[0].toUpperCase()); if( i == null){ hm.put(arr[0].toUpperCase(), 1); }else if( i != null){ i++; hm.put(arr[0].toUpperCase(),i); } str = str.substring(arr[0].toUpperCase().length()+1); } Integer i = hm.get(arr[1].toUpperCase()); if( i == null){ hm.put(arr[1].toUpperCase(), 1); }else if( i != null){ i++; hm.put(arr[1].toUpperCase(),i); } } public static void printAll(){ Set 编号:ADV-18 题目:实数相加 关键字:io 算法 类型:vip试题 问题描述 计算两个实数相加的结果。 输入的实数满足如下要求: (1) 小数点前的整数部分最多100位,(2) 小数点后的小数部分最多100位. 输入格式 两行字符串,每行都是一个合法的实数。合法的意思是指: 整数部分的值如果大于零,则最高位数字必定大于零. 如果整数部分的值为零,则整数部分只有一个零. 小数部分尾部可以有任意多的零. 可以没有小数部分, 此时也没有小数点. 如果有小数点, 则至少需要有一位小数部分, 且允许是零. 输出格式 相加结果。注意: 小数部分末尾如果有连续的0, 则它们都是有效数字, 不能舍去. 如果是两个整数相加, 则结果仍为整数而没有小数部分. 样例输入 样例一: 0.0000000000000000000000000000000000000111111111000000000000000000 100000000000000000000000000000000000000000000000000000.0 样例二: 3 4 样例三: 3.9 2 样例四: 1.001 8.99999999999999999999999 样例输出 样例一: 100000000000000000000000000000000000000000000000000000.0000000000000000000000000000000000000111111111000000000000000000 样例二: 7 样例三: 5.9 样例四: 10.00099999999999999999999 参考代码: import java.io.BufferedReader; import java.io.InputStreamReader; import java.math.BigDecimal; public class Main { public static void main(String args[])throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println(new BigDecimal(br.readLine()).add(new BigDecimal(br.readLine()))); } }