一.编程题
1.题意:
N = 4,M = 24
每次只能跳N的约数(不包含1和N本身)
4->6->8->12->18->242.准备一个数组stepNum[ M+1 ]
数组中每一个元素代表:从起点到这一步的最小步数
起点即使stepNum[ N ]==0;
3.
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
int N = in.nextInt();
int M = in.nextInt();
int[] ret = new int[M + 1];
for (int i = 0; i <= M; i++) {
//数组初始化
ret[i] = Integer.MAX_VALUE;
}
ret[N] = 0;
for (int i = N; i < M; i++) {
if (ret[i] == Integer.MAX_VALUE) {
//表示小易不会到达这里
continue;
}
List<Integer> n = div(i);//求约数存到n中
for (int j : n) {
if ( i + j <= M) {
ret[i + j] = Math.min(ret[i + j], ret[i] + 1);
//存最小值,最小步数
}
}
}
if (ret[M] == Integer.MAX_VALUE) {
//表示到达不了
System.out.println(-1);
} else {
System.out.println(ret[M]);
}
}
}
public static List<Integer> div(int n) {
List<Integer> list = new ArrayList<>();
for (int i = 2; i <= Math.sqrt(n); i++) {
if (n % i == 0) {
list.add(i);
if (n / i != i) {
list.add(n / i);
}
}
}
return list;
}
}
xcopy /s "C:\\program files" "d:\"
1.不是空格&&不是双引号正常打印2—> printf
1..碰到双引号,flag=0
1.碰到空格并且flag==1,换行
2.碰到双引号里面的空格需要打印,
两种打印情况,一种换行
import java.util.*;
public
class
Main
{
public
static
void
main(String[]
args){
Scanner
sc=new
Scanner(System.in);
String
str=sc.nextLine();
int
count=0;
for(int
i=0;i<str.length();i++){
//如果碰到双引号,我们就需要i++直到找到下一个双引号
if(str.charAt(i)=='"'){
do{
i++;
}while(str.charAt(i)!='"');
}
if(str.charAt(i)=='
'){
count++;
}
}
System.out.println(count+1);
int flag=1;
for(int i=0;i<str.length();i++){
//遇到第一个双引号,flag变为0,
//遇到第二个双引号结束后flag重新变为1
//只要在打印双引号中的内容的时候flag的值始终为0
if(str.charAt(i)=='"'){
flag^=1;
}
//除了双引号和特殊空格以外的字符都要打印
if(str.charAt(i)!=' '&&str.charAt(i)!='"'){
System.out.print(str.charAt(i));
}
//双引号中的空格需要打印
if(str.charAt(i)==' '&&flag==0){
System.out.print(str.charAt(i));
}
//双引号外碰到空格,需要换行
if(str.charAt(i)==' '&&flag==1){
System.out.println();
}
}
}
}