Scanner


私信TA

用户名:1505256190

访问量:2511

签 名:

等  级
排  名 3164
经  验 2015
参赛次数 0
文章发表 8
年  龄 0
在职情况 学生
学  校 中北大学
专  业

  自我简介:

TA的其他文章

解题思路:

    一开始看题是个数学题,就想着找找规律 ,然后在纸上看了半天发现有点乱 不太好写就想着换一种思路 在看M<=10

这样的话全排列也是挺快的只要在全排列中找到适合的就count++便好

于是乎开始了全排列

在开始时候一元的就是1 二元的就是2全放在一个数组里面

注意事项:

注意的是判断条件,还有要学会全排列

参考代码:

public static void f5(int[] arr, int k) {            //全排列
		if(k == arr.length) {
			boolean boo = judge(arr);    //判断条件满足
			if(boo) {
				count++;        //count++
			}
		}
		for(int i = k; i < arr.length; i++) {
			swap(arr,i,k);
			f5(arr,k+1);
			swap(arr,i,k);
		}
	}
public static boolean judge(int[] arr) {            //判断条件
		// TODO Auto-generated method stub
		int sum = 0;
		for (int i = 0; i < arr.length; i++) {    //遍历一次数组 如果是一元的就sum+1
			if(arr[i] == 1) {
				sum += 1;
			}
			if(arr[i] == 2) {                //如果是二元的就sum-1
				sum -= 1;
			}
			if(sum<0) {                    //若出现了负数说明这种情况不符合直接return
				return false;
			}
		}
		return true;
	}
	
public static void swap(int[] arr ,int i, int j) {
		int c = arr[i];
		arr[i] = arr[j];
		arr[j] = c;
	}
public static void main(String[] args) {

		 Scanner sc=new Scanner(System.in);
		 int M = sc.nextInt();
		 int N = sc.nextInt();
		 int K = sc.nextInt();
		 int[] arr = new int[M];
		 Arrays.fill(arr, 0,N,1);
		 Arrays.fill(arr, N,arr.length,2);
		 f5(arr,0);
		 System.out.println(count);
	}


                                                                    

 

0.0分

0 人评分

  评论区

  • «
  • »