关于:删除字符,填方格,java作业3
删除字符
- 此题目我用java写的,因为要输出的是子串,用数组存的话,可能会需要变数组的大小
代码块
代码块语法遵循标准markdown代码,例如:
package oj;
import java.io.*;
import java.util.Scanner;
import java.util.ArrayList;
import java.util.*;
import java.util.NoSuchElementException;
class deletechar
{
public static void main(String[] args)throws java.util.NoSuchElementException
{
Scanner scan=new Scanner(System.in);
List<Character> list=new ArrayList<Character>();
int i=0;
String s;
Character c='a';
while ((s=scan.nextLine())!=null)
{
String[] str=s.split("");
for(Character a:str[0].toCharArray()){
c=a;
for(Character b:str[1].toCharArray()){
if(b.equals(a)) i++;
}
}
if(i==0)list.add(c);
}
for(Character d:list){
System.out.println(d);
}
}
}
其中有几个难点:
- 导入import java.util.Scanner 之后才可以创建Scanner的对象,从而从键盘得到输入
- 类Scanner 的方法:scanner.nextLine();scanner.h
- 把一个字符串用空格分开并存入字符串数组中:String[] str=s.spilt(“s”)
- 逻辑方面就是两个for循环,逐个比较两个字符串了。
填方格
- 这里用的主要是深度优先算法,DFS是个递归函数。
#include<stdio.h>
#include<stdlib.h>
static int count=0;
static int lace[3][3]={0};
int HZ(int a ,int b)
{ int c=1;
do{if(b==1) return 1;c=a%b;a=b;b=c;}while(c!=0);
return 0;
}
int check(int a,int h,int z){//a代表要填入的数,h,z代表要填入的位置
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
if(a==lace[i][j]&&(h-1>=0&&!HZ(a,lace[h-1][z]))&&(z-1>=0&&!HZ(a,lace[h][z-1])))return 0;
}
}
return 1;
}
int hasNext(int &x,int &y){
if(x==2&&y==2)return 0;
else{
if(++y<=2) x=x;
else {
x++;
y=0;
}
return 1;
}
}
void dfs(int x ,int y,int a[9] ){
if(x==2&&y==2){
count++;
dfs(0,0,a);}
for(int i=0;i<9;i++){
if(check(a[i],x,y))
{
lace[x][y]=a[i];break;}
}
if(hasNext(x,y)){
dfs(x,y,a);
}
return;
}
int main(){
int a[9]={1,1,1,1,1,1,1,1,1};
dfs(0,0,a);
printf("%d",count);
return 0;
}