分别使用字符串和数组的方式,数组更简便一些
import java.util.Scanner;
public class test26 {
//将字符串转化为数字
public static int function26(String s) {
int flag = 0;//标志位用来判断字符串第一位是否为+和-
int number = 0;//定义最后要返回的数
int B = 1;//定义了每一位数字要乘以的倍数,个位乘1,十位乘10
if (s.charAt(0) == '-') {
flag = -1;//如果第一位是减号,则标志位变为-1
}
if (s.charAt(0) == '+') {
flag = 1;//如果第一位是加号,则标志位为1,
}//最后的数字乘以标志位
//****************************************
//由于第一位是符号比第一位不是符号要多考虑一位的遍历
//第一位是符号,如果能把符号判断完成之后变为0,则不需要分情况讨论
//但是charAt方法底层的value被final修饰,无法改变对应值,
//因而一种方法是分情况讨论,另一种情况就是数组实现
if (flag == 0) {//遍历
for (int i = s.length()-1; i >=0; i--) {
if (s.charAt(i) < '0' || s.charAt(i) > '9') {
return 0;
} else {//要注意这里的关键,‘0’字符在表中有对应的数值,和‘1’字符差1
//因而相减就能够得到该位的数字值,这里倍数是从1开始,所以从后往前遍历
number = number + (s.charAt(i) - '0') * B;
B = B * 10;//每次遍历,倍数++
}
}
return number ;
} else {//有符号的情况
for (int i = s.length()-1; i >0; i--) {
if (s.charAt(i) < '0' || s.charAt(i) > '9') {
return 0;
} else {
number = number + (s.charAt(i) - '0') * B;
B = B * 10;
}
}
}
return number * flag;//最后要返回的数要乘以一个flag符号数
}
public static void main(String[] args) {
//将一个字符串转化为一串数字
Scanner scanner=new Scanner(System.in);
String s1=scanner.nextLine();
int a=function26(s1);
System.out.println(a);
}
}
import java.util.Scanner;
public class test27 {
public static int function27(String s){
//使用数组的方法
char[]arr= s.toCharArray();
//设立标志位
int flag=1;
if (arr[0]=='+'){
flag=1;
arr[0]='0';
//这里设置位0是为了遍历时不用刻意区分有无符号的情况
}
else if (arr[0]=='-') {
flag = -1;
arr[0] = '0';
}
int sum=0;//最后输出的值
for (int i = 0; i < s.length(); i++) {
if (arr[i]<'0'||arr[i]>'9'){
sum=0;
break;
}
sum=sum*10+arr[i]-'0';
}
return sum*flag;
}
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
String s1=scanner.nextLine();
int a=function27(s1);
System.out.println(a);
}
}
import java.util.Scanner;
public class test28 {
//该题主要是去推导一个数学边界
//同时使用二维数组进行一个有效判定
//推导过程:1.由题可得算数平方根位为2,则
//(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)=4
//2.(x1-x2)*(x1-x2)看作A,(y1-y2)*(y1-y2)看作B,
// 有下列五种情况可以满足
//2+2 1+3 3+1 0+4 4+0 但前三种都没有解(x1,x2等都是整数)
//3.于是只有第4和第五种情况可满足
//x1-x2=2; y1=y2;或者y1-y2=2;x1=x2;
//对应到题干中则是[i][j+2] [i+2][j]时欧几里得距离为2
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
//w*H 分为为行和列即上述分析的i和j
int W=scanner.nextInt();
int H=scanner.nextInt();
int count=0;
int arr[][]=new int[W][H];
for (int i = 0; i < W; i++) {
for (int j = 0; j < H; j++) {
if (arr[i][j]==0){
count++;
//初始值都为0,且第一个点定为第一个存蛋糕的位置
}
//j+2可能最后数组越界
if (j+2<H) {
arr[i][j + 2] = 1;
}
if (i+2<W) {
arr[i + 2][j] = 1;
}
}
}
System.out.println(count);
}
}
版权声明:本文为weixin_52748001原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。