一、题干
Description
计算 a+b 的值
Input
输入一行,两个整数 a,b (0<=a,b<=10)
Output
a+b 的运算结果
Sample Input
1 2
Sample Output
3
View Code
二、分析
比较简单
1、接收,空格分割,数据类型转换
View Code
三、代码
package 模拟;
import java.util.Scanner;
public class T1 {
/**
* @param args
*/
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
String aString=scanner.nextLine();
String[] arrStrings=aString.split(" ");
int a=Integer.parseInt(arrStrings[0]);
int b=Integer.parseInt(arrStrings[1]);
System.out.println(a+b);
}
}
View Code
1001.不重复数
一、题干
Description
给定N是一个正整数,求比N大的最小“不重复数”,这里的不重复是指没有两个相等的相邻位,如1102中的11是相等的两个相邻位故不是不重复数,而12301是不重复数。
Input
输入由多组测试数据组成。第一行输入一个整数t,表示测试数据的组数。
接下来的t行,每行输入一个数。
Output
输出有t行,每行依次对应一组测试数据的运算结果。
Sample Input
3
11000000
222222222
333333333
Sample Output
12010101
230101010
340101010
View Code
二、分析
当时觉得比较难,现在感觉还好
1、穷举法
2、判断是否有重复的
3、字符串的截取,charAt();
View Code
三、代码
package 模拟;
import java.util.Scanner;
public class T2 {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int conut=scanner.nextInt();
int[] arr=new int[conut];
for (int i = 0; i < arr.length; i++) {
int in=scanner.nextInt();
arr[i]=getMinNum(in);
}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
//找最小的数
private static int getMinNum(int in) {
for ( in+=1; ; in++) {
if (getCf(in)) {
return in;
}
}
}
//判断是否有重复的,转成string比较好判断些
private static boolean getCf(int in) {
String string=in+"";
for (int i = 0; i < string.length()-1; i++) {
if (string.charAt(i)==string.charAt(i+1)) {
return false;
}
}
return true;
}
}
View Code
1002.单位转换
一、题干
Description
在计算机存储里面的单位转换。我们都知道1MB=1024KB,1KB=1024B,1B=8bit,试编程实现单位转换。
Input
输入由多组测试数据组成。首先输入一个整数n,表示测试数据的数目。
接下来的n行,每行表示一个未化简的数据,如xMB,xKB,xB,xbit,(1≤x≤50)
Output
输出为换算过后的数据,ybit
Sample Input
4
1MB
1KB
2B
1bit
Sample Output
8388608bit
8192bit
16bit
1bit
View Code
二、分析
还是很简单的
1、接收一个字符串
2、提取后面的单位,提取数字部分
3、endsWith();的使用,直接判断结尾
View Code
三、代码
package 模拟;
import java.util.Scanner;
public class T3 {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int conut=scanner.nextInt();
String[] arr=new String[conut];
for (int i = 0; i < arr.length; i++) {
String in=scanner.next();
arr[i]=getZh(in);
}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
private static String getZh(String nextLine) {
int le=nextLine.length();
String reString="";
if (nextLine.endsWith("MB")) {
reString=Integer.parseInt(nextLine.substring(0, le-2))*1024*1024*8 +"bit";
}else if (nextLine.endsWith("KB")) {
reString=Integer.parseInt(nextLine.substring(0, le-2))*1024*8 +"bit";
}else if(nextLine.endsWith("B")){
reString=Integer.parseInt(nextLine.substring(0, le-1))*8 +"bit";
}else if (nextLine.endsWith("bit")) {
reString=nextLine;
}
return reString;
}
}
View Code
1003.奇偶排序
一、题干
Description
给定一个存放正数的数组,元素个数视输入情况而定,重新排列数组使得数组左边为奇数,右边为偶数,且保证奇数和偶数之间元素相对位置不变。
Input
输入由多组测试数据组成。第一行输入一个整数t,表示测试数据的组数。
输入字符串的格式为:“操作数1 操作数2 … 操作数n”,“操作数”与“操作数”之间以一个空格隔开。
Output
输出有t行,每行依次对应一组测试数据的运算结果。
Sample Input
3
7 32 56 32 1 9
23 11 2 68 98 2 3 68 100
3 5 12 22 1 23 567 876 3 2 56 78
Sample Output
7 1 9 32 56 32
23 11 3 2 68 98 2 68 100
3 5 1 23 567 3 12 22 876 2 56 78
View Code
二、分析
1、接收输入的字符串,转成int型数组
2、前面放奇数,后面放偶数的(相对位置不变)
3、也不难,先把所有的奇数找出来放在前面,在来找偶数的
View Code
三、代码
package 模拟;
import java.io.IOException;
import java.util.Scanner;
public class T4 {
public static void main(String[] args) throws IOException {
Scanner scanner=new Scanner(System.in);
String con=scanner.nextLine();
int conut=Integer.parseInt(con);
//用数组装起来
String[] arrStrings=new String[conut];
for (int i = 0; i < arrStrings.length; i++) {
//读取一个带空格的字符串
//PS:用scanner.nextLine有问题、用scanner.next会以空格来结束
//百度到用bufferedReader.readLine()
//在自己电脑上测试可以,上传网上测不通过
String inString=scanner.nextLine();
arrStrings[i]=getArr(inString);
}
//输出
for (int i = 0; i < arrStrings.length; i++) {
System.out.println(arrStrings[i]);
}
}
//奇数放前面,偶数放后面
private static String getArr(String inString) {
//转成字符串数组
String[] strArrStrings=inString.split(" ");
String re="";
//奇数
for (int i = 0; i < strArrStrings.length; i++) {
if (Integer.parseInt(strArrStrings[i])%2==1) {
re=re+strArrStrings[i]+" ";
}
}
//偶数
for (int i = 0; i < strArrStrings.length; i++) {
if (Integer.parseInt(strArrStrings[i])%2==0) {
re=re+strArrStrings[i]+" ";
}
}
re=re.substring(0, re.length()-1);
return re;
}
}
View Code
1004.算术运算
一、题干
Description
通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串。
补充说明:
1. 操作数为正整数,不需要考虑计算结果溢出的情况。
2. 若输入算式格式错误,输出结果为“E”。
Input
输入由多组测试数据组成。第一行输入一个整数t,表示测试数据的组数。
输入字符串的格式为:“操作数1 运算符 操作数2”,“操作数”与“运算符”之间以一个空格隔开。
Output
输出有t行,每行依次对应一组测试数据的运算结果。
Sample Input
3
5 + 3
3 – 5
9 ++ 7
Sample Output
8
-2
E
View Code
二、分析
同1001题,无他的
三、代码
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
public class T4 {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
Scanner scanner=new Scanner(System.in);
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(System.in));
int conut=scanner.nextInt();
String[] arrString=new String[conut];
for (int i = 0; i < arrString.length; i++) {
arrString[i]=bufferedReader.readLine();
}
for (int i = 0; i < arrString.length; i++) {
System.out.println(getNum(arrString[i]));
}
}
public static String getNum(String s) {
String sArrString[]=s.split(" ");
String ret="E";
try {
if (sArrString[1].equals("+")) {
ret=Integer.parseInt(sArrString[0])+Integer.parseInt(sArrString[2])+"";
}
if (sArrString[1].equals("-")) {
ret=Integer.parseInt(sArrString[0])-Integer.parseInt(sArrString[2])+"";
}
} catch (Exception e) {
}
return ret;
}
}
View Code
1005.奇偶排序
一、题干
Description
将10000块钱兑换成由5000块、2000块、1000块、500块、100块、50块、10块、5块、1块的组成的零钱,问有多少种兑换方式?
Input
无输入
Output
运算结果。
样例输出中的结果不正确,只是格式提示
Sample Input
无输入
Sample Output
13456789
View Code
二、分析
/**
* 将10000块钱兑换成由5000块、2000块、1000块、500块、100块、50块、10块、5块、1块的组成的零钱,问有多少种兑换方式?
*
* 一般的都是写八九层循环做的,
* 优化:
* 1、循环次数的控制(动态的控制,根据上层循环得结果来决定下层循环的次数)
* 2、每层计算循环的结果:sum[],省的每次都要重新计算一次
* 3、最后一层,到5和1的时候,直接(10000-sum[6])/5就可得到5的次数,1不用考虑
*/
View Code
三、代码
(答案:24597373438)
package 模拟;
public class T6 {
/**
* 将10000块钱兑换成由5000块、2000块、1000块、500块、
* 100块、50块、10块、5块、1块的组成的零钱,问有多少种兑换方式?
*/
public static void main(String[] args) {
//9种面额的钱
int[] money=new int[]{5000,2000,1000,500,100,50,10,5,1};
//没个循环后的钱数
int[] sum=new int[9];
//下层循环的次数
int[] conut=new int[9];
long re=0;
//5000
for (int i = 0; i < 3; i++) {
sum[0]=i*money[0];
conut[1]=(10000-sum[0])/money[1]+1;
//2000
for (int j = 0; j < conut[1]; j++) {
sum[1]=j*money[1]+sum[0];
conut[2]=(10000-sum[1])/money[2]+1;
//1000
for (int k = 0; k < conut[2]; k++) {
sum[2]=k*money[2]+sum[1];
conut[3]=(10000-sum[2])/money[3]+1;
//500
for (int k2 = 0; k2 < conut[3]; k2++) {
sum[3]=k2*money[3]+sum[2];
conut[4]=(10000-sum[3])/money[4]+1;
//100
for (int l = 0; l < conut[4]; l++) {
sum[4]=l*money[4]+sum[3];
conut[5]=(10000-sum[4])/money[5]+1;
//50
for (int l2 = 0; l2 < conut[5]; l2++) {
sum[5]=l2*money[5]+sum[4];
conut[6]=(10000-sum[5])/money[6]+1;
//10
for (int m = 0; m < conut[6]; m++) {
sum[6]=m*money[6]+sum[5];
conut[7]=(10000-sum[6])/money[7]+1;
re+=conut[7];
}
}
}
}
}
}
}
System.out.println(re);
}
}
View Code
1006.分解质因数
一、题干
Description
将一个正整数N分解质因数,比如150=2*3*5*5,其质因数为2 3 5 5。
Input
输入由多组测试数据组成。第一行输入一个整数t,表示测试数据的组数。
接下来的t行,每行输入一个正整数。
Output
输出有t行,每行依次对应一组测试数据的输出结果。
Sample Input
2
90
150
Sample Output
2 3 3 5
2 3 5 5
View Code
二、分析
1、分解质因数,从2开始除,除不断时,找大一点的再除,直至余数为零
2、找更大的一个质因数
3、只能被自己和1整除的数为质因数
View Code
三、代码
package 模拟;
import java.util.Scanner;
public class T7 {
/**
* @param args
*/
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int conut=Integer.parseInt(scanner.nextLine());
String[] arrString=new String[conut];
for (int i = 0; i < arrString.length; i++) {
arrString[i]=getZY(scanner.nextLine());
}
for (int i = 0; i < arrString.length; i++) {
System.out.println(arrString[i]);
}
}
//分解质因数,从2开始除,除不断时,找大一点的再除,直至余数为零
private static String getZY(String nextLine) {
int num=Integer.parseInt(nextLine);
int zhi=2;
String reString="";
for ( ;1!=num ; ) {
if (num%zhi==0) {
reString=reString+zhi+" ";
num/=zhi;
}else {
zhi=getZHI(zhi);
}
}
return reString;
}
//找更大的一个质因数
private static int getZHI(int zhi) {
for (int i = zhi+1; ; i++) {
for (int j = 2; j < zhi+1/2+1; j++) {
if (i%j==0) {
break;
}
}
return i;
}
}
}
View Code
1007.回文素数
一、题干
Description
回文素数是指,如果一个正整数n从左向右和从右向左读结果都相同且是素数,则称之为回文素数。编程找出1000以内的回文素数
Input
无输入
Output
输出有若干行,每行输出5个回文素数。(样例输出只是格式提示)
Sample Input
无输入
Sample Output
2 3 5 7 11
101 131 151 181 191
View Code
二、分析
1、先判断是否为素数
2、再判断是否为回文数
View Code
三、代码
package 模拟;
public class T8 {
/**
* 回文素数是指,如果一个正整数n从左向右和从右向左读结果都相同且是素数,
* 则称之为回文素数。编程找出1000以内的回文素数
*/
public static void main(String[] args) {
int co=0;
//判断素数
for (int i = 2; i < 1000; i++) {
boolean fa=true;
for (int j = 2; j < i/2+1; j++) {
if (i%j==0) {
fa=false;
break;
}else{
fa=true;
}
}
//是素数的再看是不是回文数
if (fa) {
if (getHui(i)) {
co++;
System.out.print(i+" ");
if (co==5) {
System.out.println();
co=0;
}
}
}
}
}
//判断是否为回文数
private static boolean getHui(int i) {
String aString=i+"";
int le=aString.length();
if (le==1) {
return true;
}else if (le==2) {
if (aString.charAt(0)==aString.charAt(1)) {
return true;
}
}else if (le==3) {
if (aString.charAt(0)==aString.charAt(2)) {
return true;
}
}
return false;
}
}
View Code