详细题库:初级题:从考试成绩中划出及格线
10个学生考完期末考试评卷完成后,A老师需要划出及格线,要求如下:
(1) 及格线是10的倍数;
(2) 保证至少有60%的学生及格;
(3) 如果所有的学生都高于60分,则及格线为60分
中级题:亮着电灯的盏数 一条长廊里依次装有n(1 ≤ n ≤ 65535)盏电灯,从头到尾编号1、2、3、…n-1、n。每盏电灯由一个拉线开关控制。开始,电灯全部关着。
有n个学生从长廊穿过。第一个学生把号码凡是1的倍数的电灯的开关拉一下;接着第二个学生把号码凡是2的倍数的电灯的开关拉一下;接着第三个学生把号码凡是3的倍数的电灯的开关拉一下;如此继续下去,最后第n个学生把号码凡是n的倍数的电灯的开关拉一下。n个学生按此规定走完后,长廊里电灯有几盏亮着。
注:电灯数和学生数一致。
高级题:地铁换乘已知2条地铁线路,其中A为环线,B为东西向线路,线路都是双向的。经过的站点名分别如下,两条线交叉的换乘点用T1、T2表示。编写程序,任意输入两个站点名称,输出乘坐地铁最少需要经过的车站数量(含输入的起点和终点,换乘站点只计算一次)。地铁线A(环线)经过车站:
A1 A2 A3 A4 A5 A6 A7 A8 A9 T1 A10 A11 A12 A13 T2 A14 A15 A16 A17 A18
地铁线B(直线)经过车站:B1 B2 B3 B4 B5 T1 B6 B7 B8 B9 B10 T2 B11 B12 B13 B14 B15
1去掉最大值、最小值之后剩下的个数
1、输入一串数,以','分隔,输出所有数中去掉最大值、最小值之后剩下的个数。(其中最大值与最小值可能有多个)
Smple input:3,3,5,3,6,9,7,9 Sample outPut: 3
2从5个人中选取2个人作为礼仪
要从5个人中选取2个人作为礼仪,其中每个人的身高范围为160-190,要求2个人的身高差值最小(如果差值相同的话,选取其中最高的两人),以升序输出两个人的身高。
Smple input:161 189 167 172 188 Sample outPut: 188 189
3验证括号是否匹配
输入一串字符串,其中有普通的字符与括号组成(包括‘(’、‘)’、‘[’,']'),要求验证括号是否匹配,如果匹配则输出0、否则输出1.
Smple input:dfa(sdf)df[dfds(dfd)] Smple outPut:0
4回文数
判断回文数,是返回1
5将第一行中含有第二行中“23”的数输出并排序
输入一行数字:123 423 5645 875 186523在输入第二行:23
将第一行中含有第二行中“23”的数输出并排序结果即:123 423 186523
6翻译电话号码
将 电话号码 one two 。。。nine zero翻译成1 2 。。9 0
中间会有double
例如输入:OneTwoThree输出:123
输入:OneTwoDoubleTwo输出:1222
输入:1Two2 输出:ERROR
输入:DoubleDoubleTwo 输出:ERROR
第三题:有空格,非法字符,两个Double相连,Double位于最后一个单词 都错误
7 AM 将整数倒序输出,剔除重复数据
输入一个整数,如12336544,或1750,然后从最后一位开始倒过来输出,最后如果是0,则不输出,输出的数字是不带重复数字的,所以上面的输出是456321和571。如果是负数,比如输入-175,输出-571。
8 AM 大数相减
输入两行字符串正整数,第一行是被减数,第二行是减数,输出第一行减去第二行的结果。
备注:1、两个整数都是正整数,被减数大于减数
示例:
输入:1000000000000001
1
输出:1000000000000000
注意大数用char a[] 存储,用%s接收,一位一位的运算。注意a[0]里的正负号
9 AM 判断if语句括号是否合法
编程的时候,if条件里面的“(”、“)”括号经常出现不匹配的情况导致编译不过,请编写程序检测输入一行if语句中的圆括号是否匹配正确。同时输出语句中出现的左括号和右括号数量,如if((a==1)&&(b==1))是正确的,而if((a==1))&&(b==1))是错误的。注意if语句的最外面至少有一对括号。提示:用堆栈来做。
输入:if((a==1)&&(b==1))
输出:RIGTH 3 3
输入:if((a==1))&&(b==1))
输出:WRONG 3 4
10 PM
输入m个字符串 和一个整数n, 把字符串M化成以N为单位的段,不足的位数用0补齐。
如 n=8 m=9 ,
123456789划分为:1234567890000000
123化为 :12300000
11 PM
整数化为2进制数,32位长度。然后逆序输出
12 PM
01背包
给定一个数,比如20然后 再给定几个数字 1 3 5 7 81 3 5 7 80 0 1 1 1 因为5+7+8=20
10个学生考完期末考试评卷完成后,A老师需要划出及格线,要求如下:
(1) 及格线是10的倍数;
(2) 保证至少有60%的学生及格;
(3) 如果所有的学生都高于60分,则及格线为60分
/**
* 思路,先将成绩排序(采用冒泡排序),排序后,先判断第一个成绩是否大于60,再讲第5位上的成绩/10取整,再*10。就是及格线了
*/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class hwTest1 {
public static void main(String[] args) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int b[] = new int[10];
String s = null;
int avg;// 及格线
try {
s = br.readLine();
} catch (IOException e) {
e.printStackTrace();
}
String[] a = s.split(" ");
for (int i = 0; i < 10; i++) {
b[i] = Integer.parseInt(a[i]);
}
System.out.println(Arrays.toString(b));
// 12 65 65 0 80 92 34 83 54 79
// 冒泡排序
for (int i = 0; i < 9; i++) {
boolean flag = false;
for (int j = 0; j < 9 - i; j++) {
if (b[j] > b[j + 1]) {
int temp = b[j];
b[j] = b[j + 1];
b[j + 1] = temp;
flag = true;
}
}
if (!flag) {
break;
}
}
System.out.println(Arrays.toString(b));
if (b[0] >= 60) {
avg = 60;
} else {
avg = (b[4] / 10) * 10;
}
System.out.println("及格线为:" + avg);
}
}
中级题:亮着电灯的盏数 一条长廊里依次装有n(1 ≤ n ≤ 65535)盏电灯,从头到尾编号1、2、3、…n-1、n。每盏电灯由一个拉线开关控制。开始,电灯全部关着。
有n个学生从长廊穿过。第一个学生把号码凡是1的倍数的电灯的开关拉一下;接着第二个学生把号码凡是2的倍数的电灯的开关拉一下;接着第三个学生把号码凡是3的倍数的电灯的开关拉一下;如此继续下去,最后第n个学生把号码凡是n的倍数的电灯的开关拉一下。n个学生按此规定走完后,长廊里电灯有几盏亮着。
注:电灯数和学生数一致。
import java.util.Scanner;
public class hwTest2 {
public static void main(String[] args) {
Scanner sin = new Scanner(System.in);
System.out.println("输入n");
int n = sin.nextInt();
boolean[] arr = new boolean[65535];
int count = 0;
for (int i = 1; i <= n; i++) {
arr[i] = false; // 表示灯初始的状态都是关着的
}
for (int i = 1; i <= n; i++) {// 第1~n个同学去拉灯
for (int j = 1; j <= n; j++) { // 第1~n盏灯
if (j % i == 0) { // 如果第i个同学去拉灯,改变的是第j盏灯的状态(j要满足于j是i的倍数)
arr[j] = !arr[j]; // 灯的状态改变
}
}
}
// n个同学操作完后,遍历n盏的的状态
for (int k = 1; k <= n; k++) {
if (arr[k]) { // arr[k]=true,则代表灯是开着的,arr[k]=false,则代表灯是关着的
count++;
}
}
System.out.println(count); // 灯是开着的个数
}
}
高级题:地铁换乘已知2条地铁线路,其中A为环线,B为东西向线路,线路都是双向的。经过的站点名分别如下,两条线交叉的换乘点用T1、T2表示。编写程序,任意输入两个站点名称,输出乘坐地铁最少需要经过的车站数量(含输入的起点和终点,换乘站点只计算一次)。地铁线A(环线)经过车站:
A1 A2 A3 A4 A5 A6 A7 A8 A9 T1 A10 A11 A12 A13 T2 A14 A15 A16 A17 A18
地铁线B(直线)经过车站:B1 B2 B3 B4 B5 T1 B6 B7 B8 B9 B10 T2 B11 B12 B13 B14 B15
1去掉最大值、最小值之后剩下的个数
1、输入一串数,以','分隔,输出所有数中去掉最大值、最小值之后剩下的个数。(其中最大值与最小值可能有多个)
Smple input:3,3,5,3,6,9,7,9 Sample outPut: 3
2从5个人中选取2个人作为礼仪
要从5个人中选取2个人作为礼仪,其中每个人的身高范围为160-190,要求2个人的身高差值最小(如果差值相同的话,选取其中最高的两人),以升序输出两个人的身高。
Smple input:161 189 167 172 188 Sample outPut: 188 189
3验证括号是否匹配
输入一串字符串,其中有普通的字符与括号组成(包括‘(’、‘)’、‘[’,']'),要求验证括号是否匹配,如果匹配则输出0、否则输出1.
Smple input:dfa(sdf)df[dfds(dfd)] Smple outPut:0
4回文数
判断回文数,是返回1
5将第一行中含有第二行中“23”的数输出并排序
输入一行数字:123 423 5645 875 186523在输入第二行:23
将第一行中含有第二行中“23”的数输出并排序结果即:123 423 186523
6翻译电话号码
将 电话号码 one two 。。。nine zero翻译成1 2 。。9 0
中间会有double
例如输入:OneTwoThree输出:123
输入:OneTwoDoubleTwo输出:1222
输入:1Two2 输出:ERROR
输入:DoubleDoubleTwo 输出:ERROR
第三题:有空格,非法字符,两个Double相连,Double位于最后一个单词 都错误
7 AM 将整数倒序输出,剔除重复数据
输入一个整数,如12336544,或1750,然后从最后一位开始倒过来输出,最后如果是0,则不输出,输出的数字是不带重复数字的,所以上面的输出是456321和571。如果是负数,比如输入-175,输出-571。
import java.util.Scanner;
public class reverseNum {
public static void main(String[] args) {
Scanner sin = new Scanner(System.in);
long n = sin.nextLong();
long num;
if (n < 0) {
num = -n;
} else {
num = n;
}
String s = String.valueOf(num);
StringBuffer str = new StringBuffer(s); //将String改成StringBuffer,StringBuffer可以变化,提供deleteCharAt(index)方法
//遍历字符串
for (int i = 0; i < str.length(); i++) {
for (int j = i + 1; j < str.length(); j++) {
if (str.charAt(i) == str.charAt(j)) { //判断重复字符,如果重复就删除后面全部的相同字符,保留第一次出现的
str.deleteCharAt(j);
}
}
}
StringBuffer strBuffer = str.reverse();//调用reverse字符串逆
String res = strBuffer.toString();
long resNum = Long.parseLong(res);
if (n < 0) {
resNum = -resNum;
}
System.out.println("倒序以及去重后的结果是:"+resNum);
}
}
8 AM 大数相减
输入两行字符串正整数,第一行是被减数,第二行是减数,输出第一行减去第二行的结果。
备注:1、两个整数都是正整数,被减数大于减数
示例:
输入:1000000000000001
1
输出:1000000000000000
注意大数用char a[] 存储,用%s接收,一位一位的运算。注意a[0]里的正负号
9 AM 判断if语句括号是否合法
编程的时候,if条件里面的“(”、“)”括号经常出现不匹配的情况导致编译不过,请编写程序检测输入一行if语句中的圆括号是否匹配正确。同时输出语句中出现的左括号和右括号数量,如if((a==1)&&(b==1))是正确的,而if((a==1))&&(b==1))是错误的。注意if语句的最外面至少有一对括号。提示:用堆栈来做。
输入:if((a==1)&&(b==1))
输出:RIGTH 3 3
输入:if((a==1))&&(b==1))
输出:WRONG 3 4
10 PM
输入m个字符串 和一个整数n, 把字符串M化成以N为单位的段,不足的位数用0补齐。
如 n=8 m=9 ,
123456789划分为:1234567890000000
123化为 :12300000
11 PM
整数化为2进制数,32位长度。然后逆序输出
12 PM
01背包
给定一个数,比如20然后 再给定几个数字 1 3 5 7 81 3 5 7 80 0 1 1 1 因为5+7+8=20