关于四位数的“吸血鬼数字”java写法和c的写法

博主是先学的c然后再学的java,所以当我遇到这个题目的时候,我首先想到的是能不能先用c来写,思前想后,终于还是写出来了,以下是c的源代码:

#include<stdio.h>
int ResultArray[100];
int r = 0;
bool findInResultArray(int x){
	
	for(int i = 0 ; i < 100 ; i ++){
		if(x == ResultArray[i])
		return true;
	}
	return false;	
}
void judgeVampire(int a[] , int x){
	int flage[4];
	for(int i = 0 ; i < 4 ; i ++){
		flage[i] = 0;	
	} 
	for(int i = 0 ; i < 4 ; i ++){
		if(flage[i] == 1) continue;
		flage[i] = 1;
		for(int j = 0 ; j < 4 ; j ++){
			if(flage[j] == 1) continue;
			flage[j] = 1;
			int R1 = a[i] * 10 + a[j];
			for(int k = 0 ; k < 4 ; k ++){
				if(flage[k] == 1) continue;
				flage[k] = 1;
				for(int m = 0 ; m < 4 ; m ++){
					if(flage[m] == 1) continue;
					flage[m] = 1;
					int R2 = a[k] * 10 + a[m];
					int R = R1 * R2;
					if(R == x){
						
						if(!findInResultArray(R)){
							ResultArray[r++] = R;
							printf("%d = %d * %d \n",x,R1,R2);							
						}
					
					}
					flage[m] = 0;
				}
				flage[k] = 0;
			}
			flage[j] = 0;
		}
		flage[i] = 0;
	}
	
}
void getEveryNumber(int a[] , int x){
	int i = 3;
	while(x > 0){
		a[i--] = x % 10;
		x /= 10;
	}
}
int main(){
	int a[4];
	for(int i = 1000 ; i < 10000 ; i ++){
		getEveryNumber(a,i);
		judgeVampire(a,i);
	}
	return 0;
}

然后我在根据这个思想,再写成java的代码,基本上没什么大的变化,有一个小小的细节,后面和大家分享,以下是java源代码:

public class Vampire {
	public static int[] ResultArray = new int[100];
	public static int r = 0;
	public static void main(String[] args){
		int[] array = new int[4];
		for(int i = 1000 ; i < 10000 ; i ++){
			getEveryNumber(array,i);
			judgeVampire(array,i);
		}				
	}
	public static boolean findInResultArray(int x){
		for(int i = 0 ; i < ResultArray.length; i ++ ){
			if(x == ResultArray[i]){
				return true;
			}
		}
		return false;
	}
	public static void getEveryNumber(int[] a,int x){
		int i = 3;
		while(x>0){			
			a[i--] = x % 10;			
			x /= 10;
		}		
	}
	public static void judgeVampire(int[] a,int x){
		boolean[] flage = new boolean[4];
		for(int i = 0 ; i < 4 ; i ++){
			flage[i] = false;
		}
		for(int i = 0 ; i < 4 ; i ++){
			if(flage[i]) continue ;
			
			flage[i] = true;
			for(int j = 0 ; j < 4; j ++){
				if(flage[j]) continue ;
				
				flage[j] = true;
				int R1 = a[i] * 10 + a[j];
				for(int k = 0 ; k < 4; k ++){
					if(flage[k]) continue ;
					
					flage[k] = true;
					for(int m = 0 ; m < 4; m ++){
						if(flage[m])	continue ;
						
						flage[m] = true;
						int R2 = a[k] * 10 + a[m];
						int R = R1 * R2;
						if(R == x){
							if(!findInResultArray(R)){
								ResultArray[r++] = R;
								System.out.println(x + "=" + R1 + "*" + R2);
							}							
						}
						flage[m] = false;
					}
					flage[k] = false;
				}
				flage[j] = false;
			}
			flage[i] = false;
		}
	}
}
在写java的时候,博主一不小心把最里层的判断条件写成了:

if(flage[m] = true) continue;

结果导致没有输出结果,在这里卡死了很久,后来博主咨询了其他大牛,终于找到了这个错误。

同时呢,这位大牛也为我普及了一下知识,就是:

布尔变量的值本身就足以用来控制if语句,因此不大可不必写成:

if(flage[m] == true) 

的形式,直接写成:

if(flage[m])

就好了。

另外附上一张在MyEclipse下的运行结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值