admin 管理员组文章数量: 1184232
2024年3月13日发(作者:在java中什么是必须实例化的对象)
输出格式
输出两行,每行两个整数,表示A^b%m的值。
样例输入
2 2
1 1
0 1
样例输出
1 0
0 1
参考代码:
import edReader;
import ption;
import treamReader;
public class Main{
static int m;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader());
String[] str = ne().split(" ");
int b = nt(str[0]);
m = nt(str[1]);
int[][] arr = new int[2][2];
for (int i = 0; i < ; i++) {
String[] tag = ne().split(" ");
for (int j = 0; j < arr[i].length; j++) {
arr[i][j] = nt(tag[j]);
}
}
int[][] tak = new int[2][2];
tak = mulpow(arr, b);
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
(tak[i][j] % m + " ");
}
n();
}
}
public static int[][] mul(int[][] x, int[][] y) {
int[][] temp = new int[2][2];
for (int a = 0; a < 2; a++) {
for (int b = 0; b < 2; b++) {
temp[a][b] = 0;
for (int c = 0; c < 2; c++) {
temp[a][b] += x[a][c] * y[c][b];
temp[a][b] %= m;
}
}
}
return temp;
}
public static int[][] mulpow(int[][] arr, int b) {
if (b == 0) {
int[][] temp = new int[2][2];
for (int x = 0; x < 2; x++) {
for (int y = 0; y < 2; y++) {
if (x == y)
temp[x][y] = 1;
}
}
return temp;
}
if (b == 1)
return arr;
int[][] rep = mulpow(arr, b / 2);
if (b % 2 == 0)
return mul(rep, rep);
else
return mul(mul(rep, rep), arr);
}
}
编号:ALGO-61
题目:奇偶判断
关键字:
类型:vip试题
问题描述
能被2整除的数称为偶数,不能被2整除的数称为奇数。给一个整数x,判断x是奇数
还是偶数。
输入格式
输入包括一个整数x,0<=x<=100000000。
输出格式
如果x是奇数,则输出“odd”,如果是偶数,则输出“even”。
样例输入
10
样例输出
even
样例输入
2009
样例输出
odd
参考代码:
import r;
public class Main {
public static void main(String[] args) {
@SuppressWarnings("resource")
Scanner scan = new Scanner();
int a = t();
if (a % 2 == 0)
n("even");
else
n("odd");
}
}
编号:ALGO-62
题目:平方计算
关键字:
类型:vip试题
问题描述
输入正整数a, m,输出a^2%m,其中^表示乘方,即a^2表示a的平方,%表示取余。
输入格式
输入包含两个整数a, m,a不超过10000。
输出格式
输出一个整数,即a^2%m的值。
样例输入
5 6
样例输出
1
参考代码:
import .*;
public class Main {
}
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader());
String str [] = ne().split(" ");
int a = nt(str[0]);
int m = nt(str[1]);
int Mi = (int)(a, 2);
(Mi%m);
}
编号:ALGO-63
题目:乘法表
关键字:
类型:vip试题
问题描述:
时间限制:1.0s ? 内存限制:512.0MB
问题描述
输出九九乘法表。
输出格式
输出格式见下面的样例。乘号用“*”表示。
样例输出
下面给出输出的前几行:
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
……
参考代码:public class Main {
public static void main(String[] args) {
for(int i=1;i<=9;i++){
for(int j=1;j
(i+"*"+j+"="+(i*j)+" ");
}
n(i+"*"+i+"="+(i*i));
}
}
}
编号:ALGO-64
题目:大小写判断
关键字:
类型:vip试题
问题描述:
时间限制:1.0s ? 内存限制:512.0MB
问题描述
给定一个英文字母判断这个字母是大写还是小写。
输入格式
输入只包含一个英文字母c。
输出格式
如果c是大写字母,输出“upper”,否则输出“lower”。
样例输入
x
样例输出
lower
样例输入
B
样例输出
upper
参考代码:
import ption;
import r;
public class Main {
public static void main(String[] args) throws IOException {
char c=(char)();
if((int)c>=65&&(int)c<=90)
n("upper");
if((int)c>=97&&(int)c<=122)
n("lower");
}
}
编号:ALGO-65
题目:比赛安排
关键字:
类型:vip试题
问题描述:
时间限制:1.0s ? 内存限制:512.0MB
问题描述
设有有2 n(n<=6)个球队进行单循环比赛,计划在2 n – 1天内完成,每个队每天进
行一场比赛。设计一个比赛的安排,使在2 n – 1天内每个队都与不同的对手比赛。
输入格式
输入文件共一行,输入n的数值。
输出格式
输出文件共(2 n – 1)行,第i行输出第i天的比赛安排。
格式为: A-B,C-D,……。其中i是天数,A,B分别为比赛双方的编号,每行共2 n-1
个比赛场次。
样例输入
2
样例输出
<1>1-2,3-4
<2>1-3,2-4
<3>1-4,2-3
参考代码:
import ist;
import ;
import r;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner();
int n=t();
List
int sum=(int) (2, n);
for(int i=1;i<=sum;i+=2){
String s=i+"-"+(i+1);
(s);
}
for(int i=1;i<=sum-2;i++){
int[] arr=new int[sum+1];
for(int j=1;j<=sum;j++)
arr[j]=j;
(new String(1+"-"+(i+2)));
arr[1]=0;arr[i+2]=0;
for(int k=2;k<=sum;k++){
for(int p=2;p<=sum;p++){
if(k!=p&&arr[p]!=0&&arr[k]!=0){
String sp=k+"-"+p;
if(ns(sp))
}
}
continue;
else{
(sp);
arr[p]=0;arr[k]=0;
}
}
}
}
}
int num=2;
("<1>");
for(int i=1,j=();i<=j;i++){
((i-1)+" ");
if(i%(sum/2)==0&&i n(); ("<"+num+">"); num++; } } 编号:ALGO-66 题目:字符串编辑 关键字: 类型:vip试题 问题描述: 时间限制:1.0s ? 内存限制:512.0MB 从键盘输入一个字符串(长度<=40个字符),并以字符 ’.’ 结束。编辑功能有:1 D:删 除一个字符,命令的方式为: D a 其中a为被删除的字符,例如:D s 表示删除字符 ’s’ , 若字符串中有多个 ‘s’,则删除第一次出现的。 2 I:插入一个字符,命令的格式为:I a1 a2 其中a1表示插入到指定字符前面,a2表示 将要插入的字符。例如:I s d 表示在指定字符 ’s’ 的前面插入字符 ‘d’ ,若原串中有 多个 ‘s’ ,则插入在最后一个字符的前面。 3 R:替换一个字符,命令格式为:R a1 a2 其中a1为被替换的字符,a2为替换的字符, 若在原串中有多个a1则应全部替换。 在编辑过程中,若出现被改的字符不存在时,则给出提示信息。 输入格式 输入文件共两行,第一行为原串(以’.’结束),第二行为命令(输入方式 参见“问题描述” 。 输出格式 输出文件共一行,为修改后的字符串或输出指定字符不存在的提示信息。 样例输入 This is a book. D s 样例输出 Thi is a book. D s 输入输出样例解释 命令为删去s,第一个在字符中出现的s在This中,即得到结果。 参考代码: import r; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(); StringBuffer sb = new StringBuffer(ne()); String s = (); if (IgnoreCase("D")) { String a = (); int l = f(a); n(CharAt(l)); } else if (IgnoreCase("I")) { String a1 = (); String a2 = (); int l = dexOf(a1); n((l, a2)); } else if (IgnoreCase("R")) { String a1 = (); String a2 = (); if (f(a1) == -1) n("u6307u5b9au5b57u7b26u4e0du5b58u5728"); else n(ng().replace(a1, a2)); } } } 编号:ALGO-67 题目:最大值与最小值的计算 关键字:数组,逻辑表达式 类型:vip试题 问题描述: 时间限制:1.0s ? 内存限制:512.0MB 输入11个整数,计算它们的最大值和最小值。 样例输入 0 1 2 3 4 5 6 7 8 9 10 样例输出 10 0 参考代码: import .*; public class Main{ public static void main(String args[]){ Scanner sc=new Scanner(); int a[]=new int[11]; a[0]=1000000; for(int i=0;i<11;i++){ String s=(); if((0)>='0'&&(0)<='9') a[i]=nt(s); } (a); if(a[10]==1000000) n(1+" "+1); else n(a[10]+" "+a[0]); } } 编号:ALGO-68 题目:判定数字 关键字:if-else结构,数据有效性检查 类型:vip试题 问题描述: 时间限制:1.0s ? 内存限制:512.0MB 编写函数,判断某个给定字符是否为数字。 样例输入 9 样例输出 yes 参考代码: import .*; public class Main { public static void main(String[] args) throws Exception { Scanner scanner=new Scanner(); String str=ne(); boolean flag=isNumber(str); if(flag){ n("yes"); } } else { n("no"); } } private static boolean isNumber(String str){ for(int i=0;i<();i++){ if((i)<'0' || (i)>'9'){ return false; } } return true; } 编号:ALGO-69 题目:字符串逆序 关键字:字符串 类型:vip试题 问题描述: 时间限制:1.0s ? 内存限制:512.0MB 输入一个字符串,长度在100以内,按相反次序输出其中的所有字符。 样例输入 tsinghua 样例输出 auhgnist 参考代码: import .*; public class Main { /** * @param args */ public static void main(String[] args) throws IOException { // TODO Auto-generated method stub exe(); /* BufferedReader br = new BufferedReader(new InputStreamReader()); String str = ne(); String [] strs = ("s+"); //n(); if(strs[0].equals(strs[1])){ n(0); }else{ int len1 = strs[0].length(); int len2 = strs[1].length(); int len = 0; len = len2; if(len1 len = len1; } for(int i=0;i if(strs[0].charAt(i)==strs[1].charAt(i)){ continue; }else{ n(strs[0].charAt(i)-strs[1].charAt(i)); break; } } }*/ } public static void exe() throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader()); String str = ne(); int len = (); for(int i=len-1;i>=0;i--){ ((i)); } } } 编号:ALGO-70 题目:最长字符串 关键字:字符串、循环 类型:vip试题 问题描述: 时间限制:1.0s ? 内存限制:512.0MB 求出5个字符串中最长的字符串。每个字符串长度在100以内,且全为小写字母。 样例输入 one two three four five 样例输出 three 参考代码: import edReader; import treamReader; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader()); String[] s = ne().split(" "); String out = ""; int length = 0; for (int i = 0; i < ; i++) { if (s[i].length() > length) { length = s[i].length(); out = s[i]; } } n(out); } } 编号:ALGO-71 题目:比较字符串 关键字:字符串 类型:vip试题 问题描述: 时间限制:1.0s ? 内存限制:512.0MB 编程实现两个字符串s1和s2的字典序比较。(保证每一个字符串不是另一个的前缀,且 长度在100以内)。若s1和s2相等,输出0;若它们不相等,则指出其第一个不同字符的 ASCII码的差值:如果s1>s2,则差值为正;如果s1 样例输入 java basic 样例输出 8 参考代码: import edReader; import treamReader; public class Main { public static void main(String[] args)throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader()); String[] strs = ne().split(" +"); int length, def = 0; } } if(strs[1].length() else length=strs[0].length(); for(int i=0; i if((def=strs[0].charAt(i)-strs[1].charAt(i)) != 0) break; } n(def); 编号:ALGO-72 题目:成绩的等级输出 关键字:分支结构 类型:vip试题 问题描述: 时间限制:1.0s ? 内存限制:512.0MB 输入一个百分制的成绩t后 输入一个百分制的成绩t后,按下式输出它的等级。等级为:90~100为A,80~89为B,70~79 为C,60~69为D,0~59为E。 样例输入 98 样例输出 A 参考代码:import lFormat; import r; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(); double n=uble(); if(n>=90) n("A"); else if (n>=80) { n("B"); } else if (n>=70) { n("C"); } else if (n>=60) { n("D"); } else { n("E"); } } } 编号:ALGO-73 题目:统计字符次数 关键字:字符串 循环 类型:vip试题 问题描述:输入一个字符串(长度在100以内),统计其中数字字符出现的次数。 样例输入 Ab100cd200 样例输出 6 参考代码: import .*; public class Main { public static void main(String [] args) throws IOException{ /* int count = 0; char c = (char) (); while(!(c=='n')){ //n(c); if(c>='0'&&c<='9'){ count++; } c = (char) (); } n(count);*/ BufferedReader br = new BufferedReader(new InputStreamReader()); StringBuilder sb = new StringBuilder(ne()); int count=0; int len = (); for(int i=0;i char c = (i); if(c>='0'&&c<='9'){ } } count++; } } n(count); 编号:ALGO-74 题目:连接字符串 关键字:算法、字符串基本操作 类型:vip试题 问题描述:编程将两个字符串连接起来。例如country与side相连接成为countryside。 输入两行,每行一个字符串(只包含小写字母,长度不超过100);输出一行一个字符 串。 样例输入 country side 样例输出 Countryside 参考代码: import iter; import ption; import ; import r; public class Main { public static void main(String args[]) throws Exception { Scanner sc = new Scanner(); String str1 = (); String str2 = (); n(str1+str2); } } 编号:ALGO-75 题目:筛选号码 关键字:算法、枚举、标记数组 类型:vip试题 问题描述 有n个人围成一圈,顺序排号(编号为1到n)。从第1个人开始报数(从1到3报数), 凡报到3的人退出圈子。从下一个人开始继续报数,直到剩下最后一个人,游戏结束。 问最后留下的是原来第几号的那位。 举个例子,8个人围成一圈: 1 2 3 4 5 6 7 8 第1次报数之后,3退出,剩下: 1 2 4 5 6 7 8 (现在从4开始报数) 第2次报数之后,6退出,剩下: 1 2 4 5 7 8 (现在从7开始报数) 第3次报数之后,1退出,剩下: 2 4 5 7 8 (现在从2开始报数) 第4次报数之后,5退出,剩下: 2 4 7 8 (现在从7开始报数) 第5次报数之后,2退出,剩下: 4 7 8 (现在从4开始报数) 第6次报数之后,8退出,剩下: 4 7 (现在从4开始报数) 最后一次报数之后,4退出,剩下: 7. 所以,最后留下来的人编号是7。 输入格式 一个正整数n,(1 输出格式 一个正整数,最后留下来的那个人的编号。 样例输入 8 样例输出 7 数据规模和约定 对于100%的数据,1 参考代码: import edReader; import treamReader; import ist; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader()); int length = nt(ne()); ArrayList } } for (int i = 1; i <= length; i++) { (i); } int control = 0; int index = 0; while (() != 1) { if (control == 2) { (index); index--; } control = (control + 1) % 3; index = (index + 1) % (); } n((0)); 编号:ALGO-76 题目:十进制数转八进制数 关键字:进制转换 类型:vip试题 问题描述:编写函数把一个十进制数输出其对应的八进制数。 样例输入 9274 样例输出 22072 参考代码: import edReader; import treamReader; public class Main { public static void main(String[] args)throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader()); int x = nt(ne().replace(" ", "")); n(lString(x)); } } 编号:ALGO-77 题目:斜率计算 关键字: 类型:vip试题 问题描述:输入两个点的坐标,即p1 = (x1, y1)和p2=(x2, y2),求过这两个点的直线的斜率。 如果斜率为无穷大输出“INF”。 样例输入 1 2 2 4 样例输出 2 样例输入 1 2 1 4 样例输出 INF 样例输入 1 2 3 2 样例输出 0 参考代码: import r; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(); int x1 = t(), y1 = t(); int x2 = t(), y2 = t(); (); if (x2 - x1 == 0) n("INF"); else n((y2 - y1) / (x2 - x1)); } } 编号:ALGO-78 题目:确定元音字母位置 关键字: 类型:vip试题 问题描述:输入一个字符串,编写程序输出该字符串中元音字母的首次出现位置,如果没有 元音字母输出0。英语元音字母只有‘a’、‘e’、‘i’、‘o’、‘u’五个。 样例输入: hello 样例输出: 2 样例输入: apple 样例输出: 1 样例输入: pmp 样例输出: 0 参考代码: import edReader; import treamReader; public class Main { public static void main(String[] args)throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader()); String str = ne(); String yy = "aeiouAEIOU"; char[] cs = Array(); for(int i=0; i<; i++){ if(f(cs[i]) != -1){ n(i+1); return; } } n(0); } } 编号:ALGO-80 题目:整数平均值 关键字: 类型:vip试题 问题描述:编写函数,求包含n个元素的整数数组中元素的平均值。要求在函数内部使用指 针操纵数组元素,其中n个整数从键盘输入,输出为其平均值。 样例输入: (输入格式说明:5为输入数据的个数,3 4 0 0 2 是以空格隔开的5个整数) 5 3 4 0 0 2 样例输出: 1 样例输入: 7 3 2 7 5 2 9 1 样例输出: 4 参考代码: import edReader; import ption; import treamReader; public class Main{ public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader()); int n = nt(ne().trim()); int sum = 0; String[] str = ne().split(" "); for (int i = 0; i < n; i++) { sum += nt(str[i]); } n(sum / n); } } 编号:ALGO-82 题目:输出米字形 关键字:无 类型:vip试题 问题描述: 根据输入的正整数n (1 米字形由一个(2n-1)*(2n-1)的矩阵组成,矩阵包含从大写A开 始的n个字母 例如:n=3时,包含A,B,C;n=4时,包含A,B,C,D。 矩阵的正中间为n个字母中字典序最大的那个,从这个字母开始,沿着西北、正北、东 北、正西、正东、西南、正南、东南八个方向各有一条由大写字母组成的直线。并且直线上 的字母按字典序依次减小,直到大写字母A。 矩阵的其它位置用英文句号.填充。 样例输入一 3 样例输出一 A.A.A .BBB. ABCBA .BBB. A.A.A 样例输入二 4 样例输出二 A..A..A .B.B.B. ..CCC.. ABCDCBA ..CCC.. .B.B.B. A..A..A 参考代码: import edReader; import ption; import treamReader; public class Main{ public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader()); int n = nt(ne()); String str = ""; for (int i = 0; i < n; i++) str += (char) (i + 65); for (int i = n - 2; i > -1; i--) str += (char) (i + 65); int len = n * 2 - 1; char[][] chs = new char[len][len]; int y = len - 1; for (int i = 0; i < ; i++) { chs[i][i] = (i); chs[i][y--] = (i); chs[len / 2][i] = (i); chs[i][len / 2] = (i); } for (int i = 0; i < ; i++) { for (int j = 0; j < chs[i].length; j++) { if(!(chs[i][j]>='A' && chs[i][j]<='Z')) chs[i][j] = '.'; } } for (int i = 0; i < ; i++) { for (int j = 0; j < chs[i].length; j++) { (chs[i][j]); } n(); } } } 编号:ALGO-83 题目:阶乘 关键字:循环语句 数学知识 类型:vip试题 问题描述: 问题描述 一个整数n的阶乘可以写成n!,它表示从1到n这n个整数的乘积。阶乘的增长速 度非常快,例如,13!就已经比较大了,已经无法存放在一个整型变量中;而35!就更大 了,它已经无法存放在一个浮点型变量中。因此,当n比较大时,去计算n!是非常困难 的。幸运的是,在本题中,我们的任务不是去计算n!,而是去计算n!最右边的那个非0 的数字是多少。例如,5! = 1*2*3*4*5 = 120,因此5!最右边的那个非0的数字是2。 再如:7! = 5040,因此7!最右边的那个非0的数字是4。请编写一个程序,输入一个整 数n(n<=100),然后输出n! 最右边的那个非0的数字是多少。 输入格式:输入只有一个整数n。 输出格式:输出只有一个整数,即n! 最右边的那个非0的数字。 输入输出样例 样例输入 6 样例输出 2 参考代码: import edReader; import treamReader; import imal; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader()); int number = nt(ne()); BigDecimal bd = new BigDecimal(1); for (long i = 1; i <= number; i++) { bd = ly(new BigDecimal(i)); } String out = ng(); for (int i = () - 1; i >= 0; i--) { if ((i) != '0') { n((i)); return; } } } } 编号:ALGO-85 题目:进制转换 关键字:字符操作 数学知识 类型:vip试题 问题描述: 问题描述 编写一个程序,输入一个二进制的字符串(长度不超过32),然后计算出相应的十 进制整数,并把它打印出来。 输入格式:输入为一个字符串,每个字符都是’0’或’1’,字符串的长度不超过 32。 输出格式:输出一个整数。 输入输出样例 样例输入 1101 样例输出 13 参考代码: import edReader; import treamReader; import ption; public class Main{ /** * @param args */ public static void fun(String n){ char[] arr=Array(); int j=0,sum=0; for(int i=-1;i>=0;i--){ //((int)(arr[i])); if(arr[j]==(char)(49)){ sum+=(2, i); } j++; } (sum); } public static void main(String[] args)throws IOException { // TODO Auto-generated method stub BufferedReader br=new BufferedReader(new InputStreamReader()); String n=ne(); fun(n); } } 编号:ALGO-88 题目:字串统计 关键字:无 类型:vip试题 问题描述 给定一个长度为n的字符串S,还有一个数字L,统计长度大于等于L的出现次数最 多的子串(不同的出现可以相交),如果有多个,输出最长的,如果仍然有多个,输出 第一次出现最早的。 输入格式 第一行一个数字L。 第二行是字符串S。 L大于0,且不超过S的长度。 输出格式 一行,题目要求的字符串。 输入样例1: 4 bbaabbaaaaa 输出样例1: bbaa 输入样例2: 2 bbaabbaaaaa 输出样例2: aa 数据规模和约定 n<=60 S中所有字符都是小写英文字母。 提示 枚举所有可能的子串,统计出现次数,找出符合条件的那个 参考代码: import r; public class Main { public static void main(String[] args) { Scanner sc=new Scanner(); int L=t(); String s=(); Main a=new Main(); (L,s); } public void childs(int L,String s) { String s1[][]=new String[60][60]; int in[][]=new int[60][60]; int max=0; int td=0; int tj=0; for(int i=L;i<();i++) for(int j=0;j<=()-i;j++) { s1[i][j]=ing(j,j+i); } for(int i=L;i<();i++) for(int j=0;j<=()-i;j++) for(int k=j;k<=()-i;k++) if(s1[i][k].equals(s1[i][j])) { in[i][j]=in[i][j]+1; } for(int i=L;i<=();i++) for(int j=0;j<=()-i;j++) { if(in[i][j]>=max && td!=i) { max=in[i][j]; td=i; tj=j; }else if(in[i][j]>max) { max=in[i][j]; td=i; tj=j; } } n(s1[td][tj]); } } 编号:ALGO-89 题目:字串删除 关键字:数组运算 类型:vip试题 问题描述 编写一个程序,先输入一个字符串str(长度不超过20),再输入单独的一个字符 ch,然后程序会把字符串str当中出现的所有的ch字符都删掉,从而得到一个新的字符 串str2,然后把这个字符串打印出来。 输入格式:输入有两行,第一行是一个字符串(内部没有空格),第二行是一个字 符。 输出格式:经过处理以后的字符串。 输入输出样例 样例输入 123-45-678 - 样例输出 12345678 参考代码: import edReader; import treamReader; import ar; import p; import or; import ; import r; public class Main { public static void main(String args[]) throws Exception { //Scanner sc = new Scanner(); BufferedReader br = new BufferedReader(new InputStreamReader()); String str = ne(); char ch = (char) (); n(e(f(ch), "")); } } 编号:ALGO-91 题目:Anagrams问题 关键字:数组运算 字符操作 类型:普通试题 问题描述 Anagrams指的是具有如下特性的两个单词:在这两个单词当中,每一个英文字母(不 区分大小写)所出现的次数都是相同的。例如,“Unclear”和“Nuclear”、“Rimon”和“MinOR” 都是Anagrams。编写一个程序,输入两个单词,然后判断一下,这两个单词是否是Anagrams。 每一个单词的长度不会超过80个字符,而且是大小写无关的。 输入格式:输入有两行,分别为两个单词。 输出格式:输出只有一个字母Y或N,分别表示Yes和No。 输入输出样例 样例输入 Unclear Nuclear 样例输出 Y 参考代码: import edReader; import treamReader; import ption; import ; public class Main{ /** * @param args */ public static void main(String[] args)throws IOException { // TODO Auto-generated method stub BufferedReader br=new BufferedReader(new InputStreamReader()); String s1=ne(); String s2=ne(); String st1=rCase(); String st2=rCase(); char[] str1=Array(); char[] str2=Array(); int[] arr1=new int[]; int[] arr2=new int[]; if(==){ for(int i=0;i<;i++){ arr1[i]=(int)(str1[i]); arr2[i]=(int)(str2[i]); if(arr1[i]>96){ arr1[i]=arr1[i]-32; } if(arr2[i]>96){ arr2[i]=arr2[i]-32; } } (arr1); (arr2); int count1=0,count2=0; for(int i=0;i<;i++){ if(arr1[i]==arr2[i]){ count1++; } count2++; //(arr1[i]+" "+arr2[i]+" "); } //(count1+" "+count2); if(count1==count2){ ("Y"); } else{ ("N"); } } else{ ("N"); } } } 编号:ALGO-92 题目:前缀表达式 关键字:字符操作 数学知识 类型:普通试题 问题描述 编写一个程序,以字符串方式输入一个前缀表达式,然后计算它的值。输入格式为:“运 算符 对象1 对象2”,其中,运算符为“+”(加法)、“-”(减法)、“*”(乘法)或“/”(除 法),运算对象为不超过10的整数,它们之间用一个空格隔开。要求:对于加、减、乘、除 这四种运算,分别设计相应的函数来实现。 输入格式:输入只有一行,即一个前缀表达式字符串。 输出格式:输出相应的计算结果(如果是除法,直接采用c语言的“/”运算符,结果 为整数)。 输入输出样例 样例输入 + 5 2 样例输出 7 参考代码: import edReader; import ption; import treamReader; public class Main { public static void main(String[] args) throws IOException { BufferedReader bf = new BufferedReader(new InputStreamReader()); String s=ne(); String [] str = (" "); int a=nt(str[1]); int b=nt(str[2]); if("+".equals(str[0])){ add(a,b); }else if("-".equals(str[0])){ subtract(a, b); }else if("*".equals(str[0])){ multiply(a, b); }else{ divide(a, b); } } public static void add(int a, int b){ n(a + b); } public static void subtract(int a, int b){ n(a - b); } public static void multiply(int a, int b){ n(a * b); } public static void divide(int a, int b){ if(b != 0){ n(a / b); }else { n("by zero"); } } } 编号:ALGO-93 题目:反置数 关键字:函数设计 字符操作 类型:VIP试题 问题描述 一个整数的“反置数”指的是把该整数的每一位数字的顺序颠倒过来所得到的另一个整 数。如果一个整数的末尾是以0结尾,那么在它的反置数当中,这些0就被省略掉了。比如 说,1245的反置数是5421,而1200的反置数是21。请编写一个程序,输入两个整数,然 后计算这两个整数的反置数之和sum,然后再把sum的反置数打印出来。要求:由于在本 题中需要多次去计算一个整数的反置数,因此必须把这部分代码抽象为一个函数的形式。 输入格式:输入只有一行,包括两个整数,中间用空格隔开。 输出格式:输出只有一行,即相应的结果。 输入输出样例 样例输入 435 754 样例输出 199 参考代码: import edReader; import ption; import treamReader; public class Main { static int sum; private static int rpNum(String str1) { // TODO Auto-generated method stub StringBuffer sb=new StringBuffer(str1); sb=e(); StringBuffer tem=new StringBuffer(); boolean ch=false; for(int i=0;i<();i++){ if((i)!='0'){ ch=true; } if(ch){ ((i)); } } return nt(ng()); } public static void main(String[] args) throws IOException { BufferedReader br=new BufferedReader(new InputStreamReader()); String[] strNum=ne().split(" "); for(int i=0;i<2;i++){ sum+=rpNum(strNum[i]); } } } n(rpNum(new Integer(sum).toString())); 编号:ALGO-94 题目:新生舞会 关键字: 类型:VIP试题 问题描述 新生舞会开始了。n名新生每人有三个属性:姓名、学号、性别。其中,姓名用长度不 超过20的仅由大小写字母构成的字符串表示,学号用长度不超过10的仅由数字构成的字符 串表示,性别用一个大写字符‘F’或‘M’表示。任意两人的姓名、学号均互不相同。换 言之,每个人可被其姓名或学号唯一确定。给出m对两人的信息(姓名或学号),判断他们 是否能共舞。两人能共舞的充要条件为两人性别相异。 输入 第一行一个整数n(2<=n<=1000),表示学生人数。接下来的n行每行依次包含一名新 生的姓名、学号、性别,分别用一个空格隔开。 之后的一行是一个整数m(1<=m<=1000),表示询问的数目。接着的m行每行包含两个 信息(姓名或学号),保证两个信息不属于同一人,中间用一个空格隔开。 输出 对于每个询问输出一行,如果两人可以共舞,输出一个大写字母‘Y’,否则输出一个大 写字母‘N’。 样例输入 4 John 10 M Jack 11 M Kate 20 F Jim 21 M 3 John 11 20 Jack Jim Jack 样例输出 N Y N 提示 可以把名字和学号都当成字符串处理。可以按以下流程实现。 #include #include using namespace std; struct tstudent { char name[21]; char num[21]; char sex; }; void readdata(tstudent student[], int n) { 输入N个学生的信息 } int findstudent(tstudent student[], int n, char* data) { if (data == NULL) return -1; 判断是否有某个学生的学号或名字等于data,如果有,函数返回该学生在student数组中的 序号,否则返回-1 } void solve(tstudent student[], int n, int m) { char x[21], y[21]; for (int i=0; i 输入两个人的信息X、Y。通过调用findstudent函数判断这两个人能否成为舞伴 } } int main() { int n, m; tstudent student[1010]; cin>>n; readdata(student, n); cin>>m; solve(student, n, m); } 参考代码: import edReader; import ption; import treamReader; public class Main { static Stu[] stu ; public static void main(String[] args) throws IOException { BufferedReader br=new BufferedReader(new InputStreamReader()); int n=nt(ne()); stu=new Stu[n]; for(int i=0;i String []str=ne().split(" "); Stu tem=new Stu(str[0],str[1],str[2]); stu[i]=tem; } int m=nt(ne()); String[][] str=new String[m][2]; for(int i=0;i String []tem=ne().split(" "); str[i][0]=tem[0]; str[i][1]=tem[1]; } String[][] arr=new String[m][2]; for(int i=0;i String tem1=str[i][0]; String tem2=str[i][1]; for(int p=0;p if(stu[p].getStuID().equals(tem1)||stu[p].getStuName().equals(tem1)){ arr[i][0]=stu[p].getStuSex(); } if(stu[p].getStuID().equals(tem2)||stu[p].getStuName().equals(tem2)){ arr[i][1]=stu[p].getStuSex(); } } } for(int i=0;i if(!arr[i][0].equals(arr[i][1])){ n("Y"); }else{ n("N"); } } } } class Stu{ String StuID; String StuName; String StuSex; public Stu(String stuID, String stuName, String stuSex) { super(); StuID = stuID; StuName = stuName; StuSex = stuSex; } public String getStuID() { return StuID; } public String getStuName() { return StuName; } public String getStuSex() { return StuSex; } } 编号:ALGO-95 题目:2的次幂表示 关键字: 类型:普通试题 问题描述 任何一个正整数都可以用2进制表示,例如:137的2进制表示为10001001。 将这种2进制表示写成2的次幂的和的形式,令次幂高的排在前面,可得到如下表达式: 137=2^7+2^3+2^0 现在约定幂次用括号来表示,即a^b表示为a(b) 此时,137可表示为:2(7)+2(3)+2(0) 进一步:7=2^2+2+2^0 (2^1用2表示) 3=2+2^0 所以最后137可表示为:2(2(2)+2+2(0))+2(2+2(0))+2(0) 又如:1315=2^10+2^8+2^5+2+1 所以1315最后可表示为: 2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0) 输入格式 正整数(1<=n<=20000) 输出格式 符合约定的n的0,2表示(在表示中不能有空格) 样例输入 137 样例输出 2(2(2)+2+2(0))+2(2+2(0))+2(0) 样例输入 1315 样例输出 2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0) 提示 用递归实现会比较简单,可以一边递归一边输出 参考代码: import edReader; import treamReader; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader()); int number = f(ne()); toString(ryString(number)); } private static void toString(String binary) { char[] temp = Array(); boolean control = false; for (int i = 0; i < ; i++) { if (temp[i] == '1') { if (control) ("+"); else control = true; ("2"); int mi = - i - 1; if (mi == 0) ("(0)"); else if (mi > 1) { ("("); toString(ryString(mi)); (")"); } } } } } 编号:ALGO-96 题目:Hello World! 关键字:输出格式 类型:VIP试题 描述 本题定义本学期作业题的输出格式,请认真阅读。 如无特殊说明,开头无空格,间隔符为1个空格,答案最后必须输出换行符("n")。 输入格式 无 输出格式 Hello World! 参考代码: public class Main{ public static void main(String[] args) { n("Hello World!"); } } 编号:ALGO-97 题目:排序 关键字:循环语句 类型:普通试题 问题描述 编写一个程序,输入3个整数,然后程序将对这三个整数按照从大到小进行排列。 输入格式:输入只有一行,即三个整数,中间用空格隔开。 输出格式:输出只有一行,即排序后的结果。 输入输出样例 样例输入 9 2 30 样例输出 30 9 2 参考代码: import .*; import ; public class Main { public static void main(String[] args) throws IOException { BufferedReader str=new BufferedReader(new InputStreamReader()); String s=ne(); String[] s1=(" "); int n=; int[] arr=new int[n]; for(int i=0;i arr[i]=nt(s1[i]); } (arr); for(int j=n-1;j>=0;j--){ (arr[j]+" "); } } } 编号:ALGO-98 题目:数位分离 关键字:字符操作 循环语句 类型:VIP试题 问题描述 编写一个程序,输入一个1000 以内的正整数,然后把这个整数的每一位数字都分离出 来,并逐一地显示。 输入格式:输入只有一行,即一个1000以内的正整数。 输出格式:输出只有一行,即该整数的每一位数字,之间用空格隔开。 输入输出样例 样例输入 769 样例输出 7 6 9 参考代码: import edReader; import treamReader; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader()); char[] out = ne().toCharArray(); for (int i = 0; i < ; i++) { if (i != - 1) (out[i] + " "); else (out[i]); } } } 编号:ALGO-99 题目:薪水计算 关键字:逻辑判断 数学知识 类型:VIP试题 问题描述 编写一个程序,计算员工的周薪。薪水的计算是以小时为单位,如果在一周的时间内, 员工工作的时间不超过40 个小时,那么他/她的总收入等于工作时间乘以每小时的薪水。 如果员工工作的时间在40 到50 个小时之间,那么对于前40 个小时,仍按常规方法计算; 而对于剩余的超额部分,每小时的薪水按1.5 倍计算。如果员工工作的时间超过了50 个小 时,那么对于前40 个小时,仍按常规方法计算;对于40~50 个小时之间的部分,每小时 的薪水按1.5 倍计算;而对于超出50 个小时的部分,每小时的薪水按2 倍计算。请编写一 个程序,输入员工的工作时间和每小时的薪水,然后计算并显示他/她应该得到的周薪。 输入格式:输入只有一行,包括一个整数和一个实数,分别表示工作时间和每小时薪水。 输出格式:输出只有一个实数,表示周薪,保留小数点后2位。 输入输出样例 样例输入 40 50 样例输出 2000.00 参考代码: import imal; import r; public class Main { public static void main(String[] args) { Scanner sc=new Scanner(); String a=(); String b=(); double t= ouble(a); double m= ouble(b); double sum=0; if(t==0||m==0) n("0.00"); else if(0 { sum=t*m; BigDecimal bd = new BigDecimal(sum); bd = le(2,_HALF_UP); n(bd); } else if(t<=50) { sum=40*m+(t-40)*m*1.5; BigDecimal bd = new BigDecimal(sum); bd = le(2,_HALF_UP); n(bd); } else { sum=40*m+10*1.5*m+(t-50)*m*2; BigDecimal bd = new BigDecimal(sum); bd = le(2,_HALF_UP); n(bd); } } } 编号:ALGO-100 题目:整除问题 关键字:循环语句 数学知识 类型:VIP试题 问题描述 编写一个程序,输入三个正整数min、max和factor,然后对于min到max之间的每一 个整数(包括min和max),如果它能被factor整除,就把它打印出来。 输入格式:输入只有一行,包括三个整数min、max和factor。 输出格式:输出只有一行,包括若干个整数。 输入输出样例 样例输入 1 10 3 样例输出 3 6 9 参考代码: import edReader; import treamReader; public class Main { public static void main(String args[])throws Exception{ BufferedReader br = new BufferedReader(new InputStreamReader()); String[] temp = ne().split(" "); int min = nt(temp[0]), max = nt(temp[1]), divi = nt(temp[2]); for(int i=min; i<=max; i++) if(i%divi==0) (i+" "); } } 编号:ALGO-101 题目:图形显示 关键字:循环语句 类型:普通试题 问题描述: 编写一个程序,首先输入一个整数,例如5,然后在屏幕上显示如下的图形(5表示 行数): * * * * * * * * * * * * * * * 参考代码: import edReader; import treamReader; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader()); int number = f(ne()); for (int i = 0; i < number; i++) { for (int j = i; j < number; j++) { if (i != number - 1) ("* "); else ("*"); } n(); } } } 编号:ALGO-102 题目:数对 关键字:循环语句 数学知识 类型:普通试题 问题描述: 编写一个程序,该程序从用户读入一个整数,然后列出所有的数对,每个数对的乘积即 为该数。 输入格式:输入只有一行,即一个整数。 输出格式:输出有若干行,每一行是一个乘法式子。(注意:运算符号与数字之间有一 个空格) 输入输出样例 样例输入 32 样例输出 1 * 32 = 32 2 * 16 = 32 4 * 8 = 32 8 * 4 = 32 16 * 2 = 32 32 * 1 = 32 参考代码: import edReader; import treamReader; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader()); int number = nt(ne()); for (int i = 1; i <= number; i++) { if(number%i==0) n(i+" * "+number/i +" = "+number); } } } 编号:ALGO-103 题目:完数 关键字:循环语句 数学知识 类型:普通试题 问题描述: 一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1、2、 3,而6=1+2+3,因此6就是“完数”。又如,28的因子为1、2、4、7、14,而28=1+ 2+4+7+14,因此28也是“完数”。编写一个程序,判断用户输入的一个数是否为“完数”。 输入格式:输入只有一行,即一个整数。 输出格式:输出只有一行,如果该数为完数,输出yes,否则输出no。 输入输出样例 样例输入 6 样例输出 yes 参考代码: import edReader; import treamReader; public class Main { public static Integer total=1; public static void main(String[] args)throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader()); int x = nt(ne()); add(x); if(x == total)n("yes"); else n("no"); } public static void add(Integer x){ if(x == 1)total = 0; int sqrt = (int)(x); for(int i=2; i<=sqrt; i++){ if(x % i == 0){ total += i; total += x/i; } } } } 编号:ALGO-104 题目:阿尔法乘积 关键字:字符操作 数学知识 类型:普通试题 问题描述: 计算一个整数的阿尔法乘积。对于一个整数x来说,它的阿尔法乘积是这样来计算的: 如果x是一个个位数,那么它的阿尔法乘积就是它本身;否则的话,x的阿尔法乘积就等于 它的各位非0的数字相乘所得到的那个整数的阿尔法乘积。例如:4018224312的阿尔法乘 积等于8,它是按照以下的步骤来计算的: 4018224312 → 4*1*8*2*2*4*3*1*2 → 3072 → 3*7*2 → 42 → 4*2 → 8 编写一个程序,输入一个正整数(该整数不会超过6,000,000),输出它的阿尔法乘积。 输入格式:输入只有一行,即一个正整数。 输出格式:输出相应的阿尔法乘积。 输入输出样例 样例输入 4018224312 样例输出 8 参考代码: import edReader; import treamReader; public class Main{ public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader()); String number = ne(); if (("0")) n(number); else { while (() > 1) { int sum = 1; char[] temp = Array(); for (int i = 0; i < ; i++) { if (temp[i] == '0') continue; sum *= temp[i] - 48; } number = sum + ""; } n(number); } } } 编号:ALGO-105 题目:黑色星期五 关键字:逻辑判断 取余运算 循环语句 类型:普通试题 问题描述: 有些西方人比较迷信,如果某个月的13号正好是星期五,他们就会觉得不太吉利,用 古人的说法,就是“诸事不宜”。请你编写一个程序,统计出在某个特定的年份中,出现了 多少次既是13号又是星期五的情形,以帮助你的迷信朋友解决难题。 说明:(1)一年有365天,闰年有366天,所谓闰年,即能被4整除且不能被100整 除的年份,或是既能被100整除也能被400整除的年份;(2)已知1998年1月1日是星期 四,用户输入的年份肯定大于或等于1998年。 输入格式:输入只有一行,即某个特定的年份(大于或等于1998年)。 输出格式:输出只有一行,即在这一年中,出现了多少次既是13号又是星期五的情形。 输入输出样例 样例输入 1998 样例输出 3 参考代码: import r; public class Main { public static boolean runnian(int year) { if((year%4==0&&year%100!=0)||(year%400==0)) return true; else return false; } public static int total(int year) { int total=0; int years=0; int count=0; if(year<2000) years=(year-1998)*365; else years=(((year-2000)/4)+1)*366+(year-1998-(((year-2000)/4)+1))*365; if(runnian(year)) years=((year-2000)/4)*366+(year-1998-((year-2000)/4))*365; int mouth []=new int []{0,31,0,31,30,31,30,31,31,30,31,30,31}; if(runnian(year)) mouth[2]=29; else mouth[2]=28; for(int i=1;i<=12;i++) { if((years+mouth[i-1]+13-4)%7==5) { count++; } years=years+mouth[i-1]; } return count; } public static void main(String[] args) { Scanner in=new Scanner(); int year=t(); int i=total(year); n(i); } } 编号:ALGO-106 题目:6-3判定字符位置 关键字:字符串操作 类型:普通试题 问题描述: 返回给定字符串s中元音字母的首次出现位置。英语元音字母只有‘a’、‘e’、‘i’、‘o’、 ‘u’五个。 若字符串中没有元音字母,则返回0。 只考虑小写的情况。 样例输入 and 样例输出 1 参考代码: import edReader; import treamReader; import ption; public class Main{ /** * @param args */ public static void main(String[] args)throws IOException { // TODO Auto-generated method stub BufferedReader br=new BufferedReader(new InputStreamReader()); String s=ne(); int n=(); char[] arr=new char[n]; } } String st="aeiou"; char[] brr=new char[5]; for(int i=0;i arr[i]=(i); } for(int i=0;i<5;i++){ brr[i]=(i); } int count=0; for(int i=0;i for(int j=0;j<5;j++){ if(arr[i]==brr[j]){ count=i+1; break; } } if(count!=0){ (count); break; } } if(count==0){ (0); } 编号:ALGO-107 题目:9-7链表数据求和操作 关键字: 类型:普通试题 问题描述: 读入10个复数,建立对应链表,然后求所有复数的和。 样例输入 1 2 1 3 4 5 2 3 3 1 2 1 4 2 2 2 3 3 1 1 样例输出 23+23i 参考代码: import edReader; import treamReader; public class Main { public static void main(String args[])throws Exception{ BufferedReader br = new BufferedReader(new InputStreamReader()); int shibu=0, xubu=0; String[] temp; for(int i=0; i<10; i++){ temp = ne().split(" "); shibu += nt(temp[0]); xubu += nt(temp[1]); } if(xubu==0) n(shibu); else if(shibu==0) n(xubu); else n(shibu+"+"+xubu+"i"); } } 编号:ALGO-108 题目:最大体积 关键字:g背包 类型:普通试题 问题描述: 每个物品有一定的体积(废话),不同的物品组合,装入背包会战用一定的总体积。假 如每个物品有无限件可用,那么有些体积是永远也装不出来的。为了尽量装满背包,附中的 OIER想要研究一下物品不能装出的最大体积。题目保证有解,如果是有限解,保证不超过2, 000,000,000 如果是无限解,则输出0 输入格式 第一行一个整数n(n<=10),表示物品的件数 第2行到N+1行: 每件物品的体积(1<= <=500) 输出格式 一个整数ans,表示不能用这些物品得到的最大体积。 样例输入 3 3 6 10 样例输出 17 参考代码: import r; public class Main { public static void main(String[] args) { Scanner sc=new Scanner(); int n=t(); int s[]=new int[n]; for(int i=0;i s[i]=t(); int t=s[0]; for(int i=0;i t=func(t,s[i]); t=func(t,s[n-1]); if(t!=1){ n(0); return; } int dp[]=new int[_VALUE/1000]; for(int i=0;i dp[s[i]]=1; for(int i=0;i<;i++){ if(dp[i]==i) continue; for(int j=0;j if(s[j]>i) continue; dp[i]=(dp[i-s[j]],dp[i]); if(dp[i]==1) break; } } for(int i=-1;i>=0;i--){ if(dp[i]==0){ n(i); return; } } } n(0); } public static int func(int a,int b){ if(a int temp=a; a=b; b=temp; } while(b!=0){ int temp=a%b; a=b; b=temp; } return a; } 编号:ALGO-109 题目:貌似化学 关键字:g背包 类型:普通试题 问题描述: 现在有a,b,c三种原料,如果他们按x:y:z混合,就能产生一种神奇的物品d。 当然不一定只产生一份d,但a,b,c的最简比一定是x:y:z 现在给你3种可供选择的物品: 每个物品都是由a,b,c以一定比例组合成的,求出最少的物品数,使得他们能凑出整数 个d物品(这里的最少是指三者个数的总和最少) 输入格式 第一行三个整数,表示d的配比(x,y,z) 接下来三行,表示三种物品的配比,每行三个整数(<=10000)。 输出格式 四个整数,分别表示在最少物品总数的前提下a,b,c,d的个数(d是由a,b,c配得的) 目标答案<=10000 如果不存在满足条件的方案,输出NONE 样例输入 3 4 5 1 2 3 3 7 1 2 1 2 样例输出 8 1 5 7 参考代码: 该题暂时没有人完全正确,暂时没有该语言的参考程序。 编号:ALGO-110 题目:字符串的展开 关键字:字符串的处理 模拟 类型:普通试题 问题描述: 人类终于登上了火星的土地并且见到了神秘的火星人。人类和火星人都无法理解对方的 语言,但是我们的科学家发明了一种用数字交流的方法。这种交流方法是这样 的,首先, 火星人把一个非常大的数字告诉人类科学家,科学家破解这个数字的含义后,再把一个很小 的数字加到这个大数上面,把结果告诉火星人,作为人类的回 答。 在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如 果在输入的字符串中,含有类似于“d-h”或者“4-8”的字串,我们就把它当作一种简写, 输出时,用连续递增的字母获数字串替代其中的减号,即,将上面两个子串分别输出为“defgh” 和“45678”。在本题中,我们通过增加一些参数的设置,使字符串的展开更为灵活。具体约 定如下: (1) 遇到下面的情况需要做字符串的展开:在输入的字符串中,出现了减号“-”,减号 两侧同为小写字母或同为数字,且按照ASCII码的顺序,减号右边的字符严格大于左边的字 符。 (2) 参数p1:展开方式。p1=1时,对于字母子串,填充小写字母;p1=2时,对于字母 子串,填充大写字母。这两种情况下数字子串的填充方式相同。p1=3时,不论是字母子串 还是数字字串,都用与要填充的字母个数相同的星号“*”来填充。 (3) 参数p2:填充字符的重复个数。p2=k表示同一个字符要连续填充k个。例如,当 p2=3时,子串“d-h”应扩展为“deeefffgggh”。减号两边的字符不变。 (4) 参数p3:是否改为逆序:p3=1表示维持原来顺序,p3=2表示采用逆序输出,注意 这时候仍然不包括减号两端的字符。例如当p1=1、p2=2、p3=2时,子串“d-h”应扩展为 “dggffeeh”。 (5) 如果减号右边的字符恰好是左边字符的后继,只删除中间的减号,例如:“d-e”应 输出为“de”,“3-4”应输出为“34”。如果减号右边的字符按照ASCII码的顺序小于或等于 左边字符,输出时,要保留中间的减号,例如:“d-d”应输出为“d-d”,“3-1”应输出为“3-1”。 输入格式 输入包括两行: 第1行为用空格隔开的3个正整数,一次表示参数p1,p2,p3。 第2行为一行字符串,仅由数字、小写字母和减号“-”组成。行首和行末均无空格。 输出格式 输出只有一行,为展开后的字符串。 输入输出样例1 输入 输出 1 2 1 abcs-w1234-9s-4zz abcsttuuvvw89s-4zz 输入输出样例2 输入 输出 2 3 2 a-d-d aCCCBBBd-d 输入输出样例3 输入 输出 3 4 2 di-jkstra2-6 dijkstra2************6 数据规模和约定 40%的数据满足:字符串长度不超过5 100%的数据满足:1<=p1<=3,1<=p2<=8,1<=p3<=2。字符串长度不超过100 参考代码: import edReader; import ption; import treamReader; public class Main { public static void main(String[] args) throws IOException { BufferedReader br=new BufferedReader(new InputStreamReader()); String [] str1=ne().split(" "); char [] chr=ne().toCharArray(); int p1=nt(str1[0]); int p2=nt(str1[1]); int p3=nt(str1[2]); StringBuffer sb=new StringBuffer(); for(int i=0;i<;i++){ if(chr[i]=='-'&&i>0&&i<-1&&chr[i+1]!='-'&&chr[i-1]!='-'){ int tem1=(int)chr[i-1]; int tem2=(int) chr[i+1]; if(((tem1-tem2))>32){ (chr[i]); continue; } if(tem1>=tem2){ (chr[i]); i++; }else if(tem2-tem1==1){ (chr[i+1]); i++; continue; }else{ StringBuffer sbTem=new StringBuffer(); if(p1==1){ for(int j=tem1+1;j char chrTem=(char)j; for(int x=0;x (chrTem); } } }else if(p1==2){ for(int j=tem1+1;j if(j>=97){ char chrTem=(char)(j-32); for(int x=0;x (chrTem); } }else if(j>=48&&j<=57){ int tem=j-48; for(int x=0;x (tem); } } } } } }else if(p1==3){ for(int j=tem1+1;j char chrTem='*'; for(int x=0;x (chrTem); } } } if(p3==2){ (e()); }else{ (sbTem); } i++; } } (chr[i]); } n(ng()); 111、明明的随机数 问题描述 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生 成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其 余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照 排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。 输入格式 输入有2行,第1行为1个正整数,表示所生成的随机数的个数: N 第2行有N个用空格隔开的正整数,为所产生的随机数。 输出格式 输出也是2行,第1行为1个正整数M,表示不相同的随机数的个数。第2行为M个 用空格隔开的正整数,为从小到大排好序的不相同的随机数。 样例输入 10 20 40 32 67 40 20 89 300 400 15 样例输出 8 15 20 32 40 67 89 300 400 题目来源 计13李震摘编自NOIP06PJ01 Java参考代码如下: import edReader; import ption; import treamReader; import ist; import ; public class Main { public static void main(String[] args) throws NumberFormatException, IOException { // TODO Auto-generated method stub BufferedReader br =new BufferedReader(new InputStreamReader()); int n=nt(ne()); int[] arr =new int[n]; String[] strTem=ne().split(" "); for(int i=0;i arr[i]=nt(strTem[i]); } ArrayList (arr[0]); for(int i=1;i for(int j=0;j<();j++){ if(arr[i]==(j)) break; if(arr[i]!=(j)&&j==()-1){ (arr[i]); } } } int num=(); n(num); int[] tem=new int[num]; for(int i=0;i tem[i]=(i); } (tem); for(int i=0;i (tem[i]+" "); } } } 112、暗恋 问题描述 同在一个高中,他却不敢去找她,虽然在别人看来,那是再简单不过的事。暗恋,是他 唯一能做的事。他只能在每天课间操的时候,望望她的位置,看看她倾心的动作,就够了。 操场上的彩砖啊,你们的位置,就是他们能够站立的地方,他俩的关系就像砖与砖之间一样 固定,无法动摇。还记得当初铺砖的工人,将整个操场按正方形铺砖(整个操场可视为R 行C列的矩阵,矩阵的每个元素为一块正方形砖块),正方形砖块有两种,一种为蓝色,另 一种为红色。我们定义他和她之间的“爱情指标”为最大纯色正方形的面积,请你写一个程 序求出“爱情指标”。 输入格式 第一行两个正整数R和C。 接下来R行C列描述整个操场,红色砖块用1来表示,蓝色砖块用0来表示。 输出格式 一个数,表示他和她之间的“爱情指标”。 样例输入 5 8 0 0 0 1 1 1 0 1 1 1 0 1 1 1 1 1 0 1 1 1 1 1 0 1 1 0 1 1 1 1 1 0 1 1 1 0 1 1 0 1 样例输出 9 数据规模和约定 40%的数据R,C<=10; 70%的数据R,C<=50; 100%的数据R,C<=200; Java参考代码如下: import edReader; import ption; import treamReader; import Tokenizer; public class Main { private static int x, y; private static int arr[][] = new int[205][205]; private static int max = 0, p, q; public static void main(String[] args) throws IOException { StreamTokenizer st = new StreamTokenizer(new InputStreamReader())); ken(); x = (int) ; ken(); y = (int) ; for (int i = 1; i <= x; i++) { for (int j = 1; j <= y; j++) { ken(); arr[i][j] = (int) ; } } for (int i = 1; i <= x; i++) { for (int j = 1; j <= y; j++) { baosou(i, j, arr[1][i], 1); } } boolean is = false; q = q - max; for (int i = p; i > p - max; i--) { if (arr[p][q] != arr[p - 1][q]) { is = true; break; } } if (is) max -= 1; n(max * max); } private static void baosou(int a, int b, int c, int d) { if (a >= x || b >= y) { if (max < d) { p = a; q = b; max = d; } return; BufferedReader(new } } } if (arr[a + 1][b] == c && arr[a][b + 1] == c && arr[a + 1][b + 1] == c) { baosou(a + 1, b + 1, c, d + 1); } else { if (max < d) { max = d; p = a; q = b; } return; } 113、数的统计 问题描述 在一个有限的正整数序列中,有些数会多次重复出现在这个序列中。 如序列:3,1,2,1,5,1,2。其中1就出现3次,2出现2次,3出现1 次,5出 现1次。 你的任务是对于给定的正整数序列,从小到大依次输出序列中出现的数及出现的次数。 输入格式 第一行正整数n,表示给定序列中正整数的个数。 第二行是n 个用空格隔开的正整数x,代表给定的序列。 输出格式 若干行,每行两个用一个空格隔开的数,第一个是数列中出现的数,第二个是该数在序 列中出现的次数。 样例输入 12 8 2 8 2 2 11 1 1 8 1 13 13 样例输出 1 3 2 3 8 3 11 1 13 2 数据规模和约定 数据:n<=1000;0 Java参考代码如下: import edReader; import ption; import treamReader; import Tokenizer; import ist; import tions; import HashMap; import ; public class Main { public static void main(String[] args) throws IOException { StreamTokenizer st = new StreamTokenizer(new BufferedReader( new InputStreamReader())); ken(); int n = (int) ; Map int m; for (int i = 0; i < n; i++) { ken(); m = (int) ; if (nsKey(m)) (m, (m) + 1); else (m, 1); } ArrayList (()); (list); int key; for (int i = 0; i < (); i++) { key = (i); n(key + " " + (key)); } } } 114、黑白无常 问题描述 某寝室的同学们在学术完之后准备玩一个游戏:游戏是这样的,每个人头上都被贴了一 张白色或者黑色的纸,现在每个人都会说一句话“我看到x张白色纸条和y张黑色的纸条”, 又已知每个头上贴着白色纸的人说的是真话、每个头上贴着黑色纸的人说的是谎话,现在要 求你判断哪些人头上贴着的是白色的纸条,如果无解输出“NoSolution.”;如果有多组解, 则把每个答案中贴白条的人的编号按照大小排列后组成一个数(比如第一个人和第三个人头 上贴着的是白纸条,那么这个数就是13;如果第6、7、8个人都贴的是白纸条,那么这个 数就是678)输出最小的那个数(如果全部都是黑纸条也满足情况的话,那么输出0) 输入格式 第一行为一个整数n,接下来n行中的第i行有两个整数x和y,分别表示第i个人说“我 看到x张白色纸条和y张黑色的纸条”。 输出格式 一行。如果无解输出“NoSolution.”。否则输出答案中数值(具体见问题描述)最小的 那个,如果全部都是黑纸条也满足情况的话,那么输出0 样例输入 2 1 0 1 0 样例输出 0 样例输入 5 3 1 0 4 1 3 4 0 1 3 样例输出 35 数据规模和约定 n<=8 Java参考代码如下: import r; public class Main{ public static void main(String args[]) { Scanner scanner = new Scanner(); int[][] xy; int n, x, y; n = t(); xy = new int[n + 1][2]; for (int i = 1; i < n + 1; i++) { xy[i][0] = t(); xy[i][1] = t(); } String[] result = new String[n + 1]; int flag = 1; for (int i = 1; i < n + 1; i++) { // 是否为全黑标志位 if (xy[i][0] == 0 && xy[i][1] == n - 1) flag = 0; result[i] = "" + i; for (int a = 1; a < n + 1; a++) { if(a == i)continue ; if (xy[i][0] == xy[a][0] && xy[i][1] == xy[a][1]) { if(xy[i][0] == 0){ result[0] = a } if (result[i].length() < (xy[i][0]+1)) result[i] = result[i] + a; } } } if (flag == 1) { n(0); } else { int temp = 100000000; for (int i = 1; i <= n; i++) { if (result[i].length() > 1) { if(temp != 100000000 && f(temp).length() < result[i].length()){ temp = nt(result[i]) ; }else{ temp = temp > nt(result[i]) ? Integer .parseInt(result[i]) : temp; } } } if (temp != 100000000) { n(temp); } else if(result[0] != null){ n(result[0]) ; }else{ n("NoSolution.") ; } } } } 115、和为T 问题描述 从一个大小为n的整数集中选取一些元素,使得它们的和等于给定的值T。每个元素限 选一次,不能一个都不选。 输入格式 第一行一个正整数n,表示整数集内元素的个数。 第二行n个整数,用空格隔开。 第三行一个整数T,表示要达到的和。 输出格式 输出有若干行,每行输出一组解,即所选取的数字,按照输入中的顺序排列。 若有多组解,优先输出不包含第n个整数的;若都包含或都不包含,优先输出不包含第 n-1个整数的,依次类推。 最后一行输出总方案数。 样例输入 5 -7 -3 -2 5 9 0 样例输出 -3 -2 5 -7 -2 9 2 数据规模和约定 1<=n<=22 T<=maxlongint 集合中任意元素的和都不超过long的范围 Java参考代码如下: import r; public class Main { int[] A; int n; long sum; int count=0; boolean[] Mark; void Search(int k, long S) { if(k>0) Search(k-1,S); if(S-A[k]==0) { (A[k]+" "); for(int i=k+1;i if(Mark[i]==true) (A[i]+" "); n(); count++; //return; } Mark[k]=true; if(k>0) Search(k-1,S-A[k]); Mark[k]=false; } public Main() { Scanner sc=new Scanner(); n=t(); A=new int[n]; Mark=new boolean[n]; for(int i=0;i sum=ng(); Search(n-1,sum); n(count); } public static void main(String[] args) { Main st=new Main(); } } 116、最大的算式 问题描述 题目很简单,给出N个数字,不改变它们的相对位置,在中间加入K个乘号和N-K-1 个加号,(括号随便加)使最终结果尽量大。因为乘号和加号一共就是N-1个了,所以恰好 每两个相邻数字之间都有一个符号。例如: N=5,K=2,5个数字分别为1、2、3、4、5,可以加成: 1*2*(3+4+5)=24 1*(2+3)*(4+5)=45 (1*2+3)*(4+5)=45 …… 输入格式 输入文件共有二行,第一行为两个有空格隔开的整数,表示N和K,其中(2<=N<=15, 0<=K<=N-1)。第二行为 N个用空格隔开的数字(每个数字在0到9之间)。 输出格式 输出文件仅一行包含一个整数,表示要求的最大的结果 样例输入 5 2 1 2 3 4 5 样例输出 120 样例说明 (1+2+3)*4*5=120 Java参考代码如下: import r; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(); int n = t(), k = t(); long temp; long[][] arr = new long[n][k + 1]; for(int i = 0; i < n; i++) { arr[i][0] = t() + (i > 0 ? arr[i - 1][0] : 0); } (); for(int a = 1; a < n; a++) { for(int b = 1; b <= k; b++) { for(int c = 0; c < a; c++) { temp = arr[a][0] - arr[c][0]; arr[a][b] = (arr[c][b - 1] * temp, arr[a][b]); } } } n(arr[n - 1][k]); } } 117、友好数 问题描述 有两个整数,如果每个整数的约数和(除了它本身以外)等于对方,我们就称这对数是 友好的。例如: 9的约数和有:1+3=4 4的约数和有:1+2=3 所以9和4不是友好的。 220的约数和有:1 2 4 5 10 11 20 22 44 55 110=284 284的约数和有:1 2 4 71 142=220 所以220和284是友好的。 编写程序,判断两个数是否是友好数。 输入格式 一行,两个整数,由空格分隔 输出格式 如果是友好数,输出"yes",否则输出"no",注意不包含引号。 样例输入 220 284 样例输出 yes 数据规模和约定 两个整数都小于10000 Java参考代码如下 import r; public class Main { static int Get(int n) { int sum=1; for(int i=2;i if(n%i==0) sum+=i; return sum; } public static void main(String[] args) { Scanner sc=new Scanner(); int m=t(),n=t(); if(Get(m)==n && Get(n)==m) n("yes"); else n("no"); } } 118、连续正整数的和 问题描述 78这个数可以表示为连续正整数的和,1+2+3,18+19+20+21,25+26+27。 输入一个正整数 n(<=10000) 输出 m 行(n有m种表示法),每行是两个正整数a,b,表示a+(a+1)+...+b=n。 对于多种表示法,a小的方案先输出。 样例输入 78 样例输出 1 12 18 21 25 27 Java参考代码如下: import r; public class Main { public static void main(String[] args){ Scanner sn = new Scanner(); int n = t(); for(int x = 1;x<=n;x++){ int sum = x; for(int y = x+1;y<=n;y++){ sum = sum+y; if(sum==n){ n(x+" "+y); }else if(sum>n){ break; } } } } } 119、寂寞的数 问题描述 道德经曰:一生二,二生三,三生万物。 对于任意正整数n,我们定义d(n)的值为为n加上组成n的各个数字的和。例如, d(23)=23+2+3=28, d(1481)=1481+1+4+8+1=1495。 因此,给定了任意一个n作为起点,你可以构造如下一个递增序列: n,d(n),d(d(n)),d(d(d(n)))....例如,从33开始的递增序列为: 33, 39, 51, 57, 69, 84, 96, 111, 114, 120, 123, 129, 141, ... 我们把n叫做d(n)的生成元,在上面的数列中,33是39的生成元,39是51的生成元, 等等。有一些数字甚至可以有两个生成元,比如101,可以由91和100生成。但也有一些 数字没有任何生成元,如42。我们把这样的数字称为寂寞的数字。 输入格式 一行,一个正整数n。 输出格式 按照升序输出小于n的所有寂寞的数字,每行一个。 样例输入 40 样例输出 1 3 5 7 9 20 31 数据规模和约定 n<=10000 Java参考代码如下: import r; public class Main { public static void main(String[] args) { boolean[] a = new boolean[10001]; for(int i=1; i<10000; i++){ int temp = i; int result = temp; while(temp>0){ result += temp%10; temp /= 10; } if(result<10001 && !a[result]){ a[result] = true; } } Scanner sc = new Scanner(); int n = t(); for(int i=1; i if(!a[i]){ n(i); } } } } 120、学做菜 问题描述 涛涛立志要做新好青年,他最近在学做菜。由于技术还很生疏,他只会用鸡蛋,西红柿, 鸡丁,辣酱这四种原料来做菜,我们给这四种原料标上字母A,B,C,D。 涛涛现在会做的菜有五种: 1、 西红柿炒鸡蛋 原料:AABDD 2、 酸辣鸡丁 原料:ABCD 3、 宫保鸡丁 原料:CCD 4、 水煮西红柿 原料:BBB 5、 怪味蛋 原料:AD 这天早上,开开去早市给涛涛买了一些原料回来。由于事先没有什么计划,涛涛决定, 对于现存的原料,每次尽量做菜单上靠前(即编号小)的菜。 现在请你写一个程序,判断一下开开和涛涛中午能吃到哪些菜。 输入格式 共4个整数a,b,c,d。分别表示开开买的A,B,C,D这4种原料的数量。每种原料不会超过 30份。 输出格式 输出5行。其中第i行表示涛涛做的第i种菜的数目。 样例输入 3 1 2 4 样例输出 1 0 1 0 1 Java参考代码如下: import r; public class Main { Scanner sc; int a,b,c,d; public static void main(String[] args) { // TODO Auto-generated method stub new Main(); } public Main(){ sc=new Scanner(); a=t(); b=t(); c=t(); d=t(); dish(a,b,c,d); } public void dish(int a,int b,int c,int d){ int i; for(i=1;(a>=2)&&(b>=1)&&(d>=2);i++){ a=a-2;--b;d=d-2; } n(i-1); for(i=1;(a>=1)&&(b>=1)&&(c>=1)&&(d>=1);i++){ --a;--b;--c;--d; } n(i-1); for(i=1;(d>=1)&&(c>=2);i++){ c=c-2;--d; } n(i-1); for(i=1;b>=3;i++){ b=b-3; } } } n(i-1); for(i=1;(a>=1)&&(d>=1);i++){ --a;--d; } n(i-1); 编号:ALGO-121 题目:猴子分苹果 关键字:递推 类型:VIP试题 问题描述 秋天到了,n只猴子采摘了一大堆苹果放到山洞里,约定第二天平分。这些猴子很崇拜 猴王孙悟空,所以都想给他留一些苹果。第一只猴子悄悄来到山洞,把苹果平均分成n份, 把剩下的m个苹果吃了,然后藏起来一份,最后把剩下的苹果重新合在一起。这些猴子依次 悄悄来到山洞,都做同样的操作,恰好每次都剩下了m个苹果。第二天,这些猴子来到山 洞,把剩下的苹果分成n分,巧了,还是剩下了m个。问,原来这些猴子至少采了多少个 苹果。 输入格式 两个整数,n m 输出格式 一个整数,表示原来苹果的数目 样例输入 5 1 样例输出 15621 数据规模和约定 0 参考代码 import r; public class Main{ /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner in = new Scanner(); int n = t() , m = t() ; for(int i = 0 ; ; i++){ int s = i * n + m , j = 0; for( ; j < n; j ++){ if(s % (n - 1) != 0 ){ break; } s = s * n / (n -1 ) + m; } if(j == n){ n(s); break; } } } } 编号:ALGO-122 题目:未名湖边的烦恼 关键字:递归 递推 类型:VIP试题 问题描述 每年冬天,北大未名湖上都是滑冰的好地方。北大体育组准备了许多冰鞋,可是人太多 了,每天下午收工后,常常一双冰鞋都不剩。 每天早上,租鞋窗口都会排起长龙,假设有还鞋的m个,有需要租鞋的n个。现在的 问题是,这些人有多少种排法,可以避免出现体育组没有冰鞋可租的尴尬场面。(两个同样 需求的人(比如都是租鞋或都是还鞋)交换位置是同一种排法) 输入格式 两个整数,表示m和n 输出格式 一个整数,表示队伍的排法的方案数。 样例输入 3 2 样例输出 5 数据规模和约定 m,n∈[0,18] 问题分析 参考代码 import r; public class Main { public static long f(long m, long n){ if(m return 0; else if(n==0) return 1; else return f(m-1, n) + f(m, n-1); } public static void main(String[] args) { Scanner sc = new Scanner(); int m = t(); int n = t(); n(f(m, n)); } } 编号:ALGO-123 题目:A+B problem 类型:VIP试题 问题描述 Given two integers A and B, your task is to output their sum, A+B. 输入格式 The input contains of only one line, consisting of two integers A and B. (0 ≤ A,B ≤ 1 000) 输出格式 The output should contain only one number that is A+B. 样例输入 1 1 样例输出 2 参考代码 import .*; public class Main{ public static void main(String[] args) throws Exception{ BufferedReader reader=new BufferedReader(new InputStreamReader()); String string =null; string=ne(); String string2[]=(" "); int a=nt(string2[0]); int b=nt(string2[1]); (); n(a+b); } } 编号:ALGO-124 题目:数字三角形 类型:VIP试题 问题描述 (图3.1-1)示出了一个数字三角形。 请编一个程序计算从顶至底的某处的一条路 径,使该路径所经过的数字的总和最大。 ●每一步可沿左斜线向下或右斜线向下走; ●1<三角形行数≤100; ●三角形中的数字为整数0,1,…99; . (图3.1-1) 输入格式 文件中首先读到的是三角形的行数。 接下来描述整个三角形 输出格式 最大总和(整数) 样例输入 5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 样例输出 30 参考代码 import r; public class Main { public static void main(String[] args) { int n; Scanner s = new Scanner(); n = t(); int[][] a = new int[n][n]; for (int i = 0; i < n; i++) { for (int j = 0; j <= i; j++) { a[i][j] = t(); } } for(int i = n - 1; i >= 0; i--) for(int j = 0; j <= i; j++) getBest(a, i, j); n(a[0][0]); } static void getBest(int[][] arr, int i, int j) { if (i == - 1) //if it's the last line return; else{ arr[i][j] = getMax(arr[i][j] + arr[i + 1][j], arr[i][j] + arr[i + 1][j + 1]); } } static int getMax(int n1, int n2) { if (n1 > n2) return n1; else return n2; } } 编号:ALGO-125 题目:王、后传说 关键字:回溯 递归 类型:VIP试题 问题描述 地球人都知道,在国际象棋中,后如同太阳,光芒四射,威风八面,它能控制横、坚、 斜线位置。 看过清宫戏的中国人都知道,后宫乃步步惊心的险恶之地。各皇后都有自己的势力范围, 但也总能找到相安无事的办法。 所有中国人都知道,皇权神圣,伴君如伴虎,触龙颜者死...... 现在有一个n*n的皇宫,国王占据他所在位置及周围的共9个格子,这些格子皇后不 能使用(如果国王在王宫的边上,占用的格子可能不到9个)。当然,皇后也不会攻击国王。 现在知道了国王的位置(x,y)(国王位于第x行第y列,x,y的起始行和列为1),请问, 有多少种方案放置n个皇后,使她们不能互相攻击。 输入格式 一行,三个整数,皇宫的规模及表示国王的位置 输出格式 一个整数,表示放置n个皇后的方案数 样例输入 8 2 2 样例输出 10 数据规模和约定 n<=12 参考代码 import r; public class Main { static int count=0; public static boolean king(int k ,int x,int y,int a[]){ if((k-x)<=1&&(a[k]-y)<=1) return false; return true; } public static boolean position_ok(int k,int a[],int x,int y){ for(int i=0;i if(a[i]==a[k]||(a[i]-a[k])==(i-k)) return false; if(king(k,x,y,a)==false) return false; return true; } public static void set(int k,int a[],int x,int y){ for(int i=0;i<;i++) { a[k]=i; if(position_ok(k,a,x,y)) {if(k==-1) { count++; } else set(k+1,a,x,y); } } } public static void main(String[] args) { Scanner sc=new Scanner(); } } int n=t(); int x=t(); int y=t(); int a[]=new int [n]; (); set(0,a,x-1,y-1); n(count); 编号:ALGO-126 题目:水仙花 关键字:判断 分支 类型:VIP试题 问题描述 判断给定的三位数是否 水仙花 数。所谓 水仙花 数是指其值等于它本身 每位数字立 方和的数。例 153 就是一个 水仙花 数。 153=13+53+33 输入格式 一个整数。 输出格式 是水仙花数,输出"YES",否则输出"NO"(不包括引号) 样例输入 123 样例输出 NO 数据规模和约定 一个三位的整数,否则输出"NO" 参考代码 import r; public class Main{ public static void main(String[] args) { Scanner in = new Scanner(); int n = t(); String s = method(n); n(s); } private static String method(int n) { int a = n % 10; int m = n / 10; int b = m % 10; int c = m / 10; if (n == a * a * a + b * b * b + c * c * c) { } } return "YES"; } return "NO"; 编号:ALGO-127 题目:C*++ Calculations 关键字:字符串处理 贪心 类型:VIP试题 问题描述 C*++语言和C++语言非常相似,然而C*++的程序有时会出现意想不到的结果。比如像 这样的算术表达式: 表达式=基本式 / 表达式+基本式 / 表达式-基本式 基本式=增量 / 系数*增量 增量=a++ / ++a 系数=0/1/2/……/1000 如“5*a++-3*++a+a++”是合法的C*++表达式。 计算这样的表达式的值的方法:首先是每个基本式进行计算,然后按照正常的算术运算 法则计算。如果一个基本式包含“a++”,则先进行乘法运算再使变量a权值+1;如果一个基 本式包含“++a”,则先使变量a权值+1再进行乘法运算。 然而基本式可以按任意顺序计算,这就是为什么计算结果是完全无法预料的。 你的任务就是去找到最大的可能结果。 第一行,一个整数n,表示变量a的初始值。 第二行,一个合法的C*++表达式。 共一行,一个整数ans,表示最大可能结果。 输入格式 input 1: 1 5*a++-3*++a+a++ input 2: 3 a+++++a 输出格式 output 1: 11 output 2: 8 数据规模和约定 对于20%的数据,表达式长度<=20。 另有20%的数据,满足n>=0。 对于100%的数据,-1000<=n<=1000,表达式长度<=10000。 注意表达式开头可能有负号! 参考代码 无 编号:ALGO-128 题目:Cowboys 关键字:递推、动态规划 类型:VIP试题 问题描述 一个间不容发的时刻:n个牛仔站立于一个环中,并且每个牛仔都用左轮手枪指着他旁 边的人!每个牛仔指着他顺时针或者逆时针方向上的相邻的人。正如很多西部片那样,在这 一刻,绳命是入刺的不可惜……对峙的场景每秒都在变化。每秒钟牛仔们都会分析局势,当 一对相邻的牛仔发现他们正在互指的时候,就会转过身。一秒内每对这样的牛仔都会转身。 所有的转身都同时在一瞬间发生。我们用字母来表示牛仔所指的方向。“A”表示顺时针方 向,“B”表示逆时针方向。如此,一个仅含“A”“B”的字符串便用来表示这个由牛仔构成 的环。这是由第一个指着顺时针方向的牛仔做出的记录。例如,牛仔环“ABBBABBBA”在一 秒后会变成“BABBBABBA”;而牛仔环“BABBA”会变成“ABABB”。 这幅图说明了“BABBA” 怎么变成“ABABB” 一秒过去了,现在用字符串s来表示牛仔们的排列。你的任务是求出 一秒前有多少种可能的排列。如果某个排列中一个牛仔指向顺时针,而在另一个排列中他指 向逆时针,那么这两个排列就是不同的。 输入格式 输入数据包括一个字符串s,它只含有“A”和“B”。 输出格式 输出你求出来的一秒前的可能排列数。 数据规模和约定 s的长度为3到100(包含3和100) 样例输入 BABBBABBA 样例输出 2 样例输入 ABABB 样例输出 2 样例输入 ABABAB 样例输出 4 样例说明 测试样例一中,可能的初始排列为:"ABBBABBAB"和 "ABBBABBBA"。 测试样例二中,可能的初始排列为:"AABBB"和"BABBA"。 参考代码 无 编号:ALGO-129 题目:特殊的数字四十 关键字:测试 类型:VIP试题 特殊的数字四十 问题描述 1234是一个非常特殊的四位数,因为它的各位数之和为10,编程求所有这样的四位十 进制数。 输出格式 按从小到大的顺序输出满足条件的四位十进制数。每个数字占用一行。 参考代码 class Main { public static void main(String[] args) { int a=0,b=0,c=0,d=0; for(int i=1000;i<10000;i++) { a=i/1000; b=i%1000/100; c=i%100/10; d=i%10; if(a+b+c+d==10) n(i); } } }
版权声明:本文标题:蓝桥杯算法训练习题与官方答案 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1710341178a568538.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论