#大家有什么疑问可以在评论区评论,一起交流进步啊o(∩_∩)o
求特殊方程的正整数解
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
boolean flag = false;
for (int i = 1; i < n; i++) {
for (int j = i; j < n; j++) {
if (i*i+j*j == n){
System.out.printf("%d %d\n",i,j);
flag =true;
}
}
}
if (!flag)
System.out.println("No Solution");
}
}
简单题
龟兔赛跑
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int t = scan.nextInt();
int flag = -1;
int rabbit = 0;
int tortoise = t*3;
rabbit = t/90 * 270;
t %= 90;
rabbit += t/40 *90;
t %= 40;
if (t<=10)
rabbit += t*9;
else
rabbit += 90;
if (tortoise > rabbit)
System.out.print("@_@ "+tortoise);
else if (tortoise < rabbit)
System.out.print("^_^ "+rabbit);
else
System.out.print("-_- "+rabbit);
}
}
我这是一个思路,这个赛跑90分钟一个循环,90分钟内又是一个循环,所以可以这么处理,也可以按照一边走一边看的思路来写
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int t = scan.nextInt();
int rabbit = 0;
int tortoise = 0;
while (t>=0){
if (t<10){
rabbit += t*9;
tortoise += t*3;
t -=10;
}
else {
t -=10;
rabbit += 90;
tortoise += 30;
if (rabbit>=tortoise){
if (t >= 30){
tortoise += 90;
}else {
tortoise += t*3;
}
t -= 30;
}
}
}
if (tortoise > rabbit)
System.out.print("@_@ "+tortoise);
else if (tortoise < rabbit)
System.out.print("^_^ "+rabbit);
else
System.out.print("-_- "+rabbit);
}
}
判断兔子距离是不是大于乌龟的时候就是模拟兔子往后看,程序的意思是兔子会一直跑,只有它比乌龟跑的远的时候才休息,肯定还有别的写法我就不写了。
币值转换
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String num = scan.next();
if ("0".equals(num)){
System.out.println('a');
return;
}
char[] charNum = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'};
char[] desc = {' ', 'S', 'B', 'Q', 'W', 'Y'};
char[] realNum = new char[num.length() * 2];
char[] flagNum = new char[num.length()*2];
for (int i = 0, j = 0; i < num.length(); i++, j += 2) {
String s = String.valueOf(num.charAt(i));
int c = Integer.valueOf(s);
realNum[j] = charNum[c];
}
for (int i = 0, j = realNum.length - 1; i < num.length(); i++, j -= 2) {
realNum[j] = desc[i % 4];
}
int a = 0;
if (num.length() <= 4)
a = 1;
else if (num.length() <= 8)
a = 2;
else if (num.length() <= 9)
a = 3;
for (int i = 1; i < a; i++) {
realNum[num.length() * 2 - 1 - 8 * i] = desc[i + 3];
}
for (int i = 0, j = 0; i < num.length(); i++, j += 2) {
String s = String.valueOf(num.charAt(i));
int c = Integer.valueOf(s);
if (c == 0){
flagNum[j] = '-';
flagNum[j+1] = '-';
}else{
flagNum[j] = '@';
flagNum[j+1] = '@';
}
}
for (int i = 0;i<flagNum.length;i++){
if (realNum[i] == 'W' || realNum[i] == 'Y' || realNum[i] == ' '){
flagNum[i]='#';
}
if (flagNum[i] == '-' && flagNum[i-1] == '-'){
realNum[i] = '-';
}
}
for (int i = flagNum.length-1;i>=0;i--){
if (flagNum[i] == '-' && (flagNum[i+1] == '$' || flagNum[i+1] == '#')){
flagNum[i] = '$';
}
}
for (int i = 0;i<flagNum.length;i++){
if (flagNum[i] == '$'){
realNum[i] = '-';
}
}
flagNum = new char[num.length()*2];
for (int i = 0;i<realNum.length;i++){
if (realNum[i] != '-'){
flagNum[i] = realNum[i];
}
}
String s = new String(flagNum);
s = s.substring(0, s.length() - 1);
System.out.println(s);
}
}
这题他娘的,不做了,现在的代码还有两个测试点没过,过都没过我也不想加注释了,回头再说吧法克。
时隔多日,我已经忘了这题有什么困难了,但是我比较相信我当时的判断,先不做了,下面继续
约分最简分式
import java.util.Scanner;
public class question04 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String string = scanner.next();
String[] data = string.split("/");
int a = Integer.parseInt(data[0]);
int b = Integer.parseInt(data[1]);
int min = a > b ? b : a;
for (int i = 2; i <= min; i++) {
if (a % i == 0 && b % i == 0) {
a /= i;
b /= i;
min = a > b ? b : a;
i = 1;
}
}
System.out.println(a + "/" + b);
}
}
里面的这个i=1很重要,我一开始没写,看了网上的答案才知道。当需要连续约分两次2的时候不写就出错了,比如4/8,第一次变成2/4,然后I就变成3了,没法把2/4再一次约分……
念数字
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String string = scanner.next();
String[] map = {"ling ", "yi ", "er ", "san ", "si ", "wu ", "liu ", "qi ", "ba ", "jiu "};
char[] chars = string.toCharArray();
StringBuilder builder = new StringBuilder();
for (char c : chars) {
if (c == '-') {
builder.append("fu ");
} else {
builder.append(map[c - '0']);
}
}
System.out.println(builder.toString().trim());
}
}
这题挺简单的,把字符串变成字符挨个处理……
单词长度
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String string = scanner.nextLine();
if ("".equals(string)) {
return;
}
string = string.trim();
String[] s = string.split(" ");
String result = "";
for (int i = 0; i < s.length; i++) {
if (s[i].length() == 0) {
continue;
}
int length = 0;
if (i == s.length - 1) {
if (".".equals(s[i])){
break;
}
length = s[i].trim().substring(0, s[i].length() - 1).length();
} else {
length = s[i].trim().length();
}
result += length + " ";
}
System.out.println(result.substring(0, result.length() - 1));
}
}
感觉可能写了很多不必要的代码,加了很多判断意外情况的东西……
冒泡法排序
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String firstLine = scanner.nextLine();
String data = scanner.nextLine();
String[] str = firstLine.split(" ");
int k = Integer.parseInt(str[1]);
String[] d = data.split(" ");
for (int i = 0; i < d.length - 1; i++) {
if (i > k - 1) {
break;
}
for (int j = 0; j < d.length - i - 1; j++) {
if (Integer.parseInt(d[j]) > Integer.parseInt(d[j + 1])) {
String tem = d[j];
d[j] = d[j + 1];
d[j + 1] = tem;
}
}
}
for (int i = 0; i < d.length; i++) {
System.out.print(d[i]);
if (i != d.length-1){
System.out.print(" ");
}
}
}
}
……
猴子选大王
import java.util.LinkedList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
LinkedList<Integer> monkeys = new LinkedList<>();
for (int i = 1; i <= n; i++) {
monkeys.add(i);
}
int flag = 1;
for (int i = 0; monkeys.size() > 1; i++, flag++) {
i = i % monkeys.size();
if (flag == 3) {
monkeys.remove(i);
i -= 1;
flag = 0;
}
}
System.out.println(monkeys.getFirst());
}
}
要是用数组做移除标记估计会比较复杂,用数组删除元素也不方便,所以用了链表,其中的i减一再加一表示当删除当前元素的时候指针不要动,然后再对删除之后的size取余数就能得到正确的指针。
删除字符串中的子串
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String data = scanner.nextLine();
String target = scanner.nextLine();
while (data.contains(target)){
data = data.replace(target, "");
}
System.out.println(data);
}
}
有现成的轮子就是Java的优点?,不过走了弯路,也可以转换成字符数组慢慢比较……
字符串的冒泡排序
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();
String[] s = input.split(" ");
int n = Integer.parseInt(s[0]);
int k = Integer.parseInt(s[1]);
String[] data = new String[n];
for (int i = 0; i < n; i++) {
data[i] = scanner.next();
}
for (int i = 0; i < n - 1 && i < k; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (data[j].compareTo(data[j + 1]) > 0) {
String tem = data[j];
data[j] = data[j + 1];
data[j + 1] = tem;
}
}
}
for (int i = 0; i < n; i++) {
System.out.println(data[i]);
}
}
}
里面的compareTo方法也可以自己写一个实现