java课堂练习之可变參数与卫条件

/*

有人邀请A,B,C,D,E,F 6个人參加一项会议,这6个人有些奇怪。由于他们有非常多要求,已知:

1)A,B两人至少有1人參加会议;

2)A,E,F 3人中有2人參加会议。

3)B和C两人一致决定,要么两人都去,要么两人都不去;

4)A,D两人中仅仅1人參加会议。

5)C,D两人中也仅仅要1人參加会议;

6)假设D不去,那么E也决定不去。

那么最后到底有哪几个人參加了会议呢?

*/

可变參数必须位于最后一项。

当可变參数个数多于一个时。必将有一个不是最后一项。所以仅仅支持有一个可变參数。

可变參数的书写形式如:

void a(boolean a,int ...args){  方法体 }

1)必须是三点;

2)... 位于变量类型和变量名之间,前后有无空格都能够。

3)可变參数的应用实际上是java虚拟机动态的开了一个数组;

4)三点后不能再加其它东西。

package cn.hncu.p37.meeting;

public class Meeting1 {
	public static void main(String[] args) {
		for (int a1 = 1; a1 <= 2; a1++) {
			for (int a2 = 1; a2 <= 2; a2++) {
				for (int a3 = 1; a3 <= 2; a3++) {
					for (int a4 = 1; a4 <= 2; a4++) {
						for (int a5 = 1; a5 <= 2; a5++) {
							for (int a6 = 1; a6 <= 2; a6++) {
								if (ok(a1, a2, a3, a4, a5, a6)) {
									System.out.println("a1--"+a1+
											"\na2--"+a2+
											"\na3--"+a3+
											"\na4--"+a4+
											"\na5--"+a5+
											"\na6--"+a6
														);
									break;
								}
							}
						}
					}
				}
			}
		}
		//相似上面6个for
		//for (int i = 0; i <= 63; i++) {//二进制表示六个人( 000000 ~ 111111  )去还是不去  1表示去 ,0表示不去
			//a = ((i & 1) == 0) ? 0 : 1;
			//b = ((i & 2) == 0) ?

0 : 1;
			//c = ((i & 4) == 0) ? 0 : 1;
		//	d = ((i & 8) == 0) ? 0 : 1;
			//e = ((i & 16) == 0) ? 0 : 1;
		//	f = ((i & 32) == 0) ? 0 : 1;
			//if (fun(a, b, c, d, e, f)) {
			//	System.out.println("a= " + a + " b= " + b + " c= " + c + " d= "
			//			+ d + " e= " + e + " f= " + f);
			//}
		//}
	}

	private static boolean ok(int a1, int a2, int a3, int a4, int a5, int a6) {
		if (!(countGo(a1, a2) >= 1)) {// A,B两人至少有1人參加会议。
			return false;
		}
		if (!(countGo(a1, a5, a6) == 2)) {// A,E,F 3人中有2人參加会议;
			return false;
		}
		if (!(countGo(a2, a3) == 2 || countGo(a2, a3) == 0)) {// B和C两人一致决定,要么两人都去,要么两人都不去;
			return false;
		}
		if (!(countGo(a1, a4) == 1)) {// A,D两人中仅仅1人參加会议。
			return false;
		}
		if (!(countGo(a3, a4) == 1)) {// C,D两人中也仅仅要1人參加会议;
			return false;
		}
		if (countGo(a4) == 0 && countGo(a5) == 1) {// 假设D不去,那么E也决定不去。
			return false;
		}
		return true;
	}

	private static int countGo(int... mee) {
		int count = 0;
		for (int me : mee) {
			if (me == 1) {
				count++;
			}
		}
		return count;
	}

}
时间: 2024-11-05 12:06:52

java课堂练习之可变參数与卫条件的相关文章

java之 ------ 可变參数和卫条件

可变參数:适用于參数个数不确定.类型确定的情况,java把可变參数当做数组处理. 可变參数必须位于最后一项.当可变參数个数多于一个时,必将有一个不是最后一项,所以仅仅支持有一个可变參数. 可变參数的书写形式如: int add(int x,int ...args){  方法体 } ... 位于变量类型和变量名之间.前后有无空格都能够: 调用可变參数的方法时.编译器为该可变參数隐含创建一个数组,在方法体中以数组的形式訪问可变參数. 条件逻辑推断型的应用(模拟人工推理) /* 有人邀请A,B,C,D

c 语言函数可变參数的处理

/************************************************************************* > File Name: va_list.c > Author: zshh0604 > Mail: [email protected] > Created Time: 2014年10月14日 星期二 15时16分09秒 **********************************************************

iOS 处理方法中的可变參数

## iOS 处理方法中的可变參数 近期写了一个自己定义的对话框的demo,想模仿系统的UIAlertView的实现方式.对处理可变參数的时候,遇到了小问题,于是谷歌了一下.写下了处理问题的方法.记录下来,以备后需. 代码实现 - (instancetype)initWithTitle:(NSString *)title message:(NSString *)message delegate:(id)delegate cancelButtonTitle:(NSString *)cancelBu

C语言利用va_list、va_start、va_end、va_arg宏定义可变參数的函数

在定义可变參数的函数之前,先来理解一下函数參数的传递原理: 1.函数參数是以栈这样的数据结构来存取的,在函数參数列表中,从右至左依次入栈. 2.參数的内存存放格式:參数的内存地址存放在内存的堆栈段中,在运行函数的时候,从最后一个(最右边)參数開始入栈.因此栈底高地址,栈顶低地址,举个样例说明一下: void test(int a, float b, char c); 那么,在调用test函数的时候,实參char c先进栈,然后是float b,最后才是int a,因此在内存中变量的存放次序是c-

可变參数

C++中传递參数时,有时候不确定參数的数量,这时候能够使用可变參数.例如以下: 1.std::initializer_list C++11标准,使用方法类似vector,參数类型需同样.使用方法例如以下: #include <initializer_list> void  method(std::initializer_list<int> il) { for(auto i: il) { printf("%d", i) ; } } int _tmain(int a

可变參数学习笔记

一.什么是可变參数 我们在C语言编程中有时会遇到一些參数个数可变的函数,比如printf()函数,其函数原型为: int printf( const char* format, ...); 它除了有一个參数format固定以外,后面跟的參数的个数和类型是可变的(用三个点"-"做參数占位符),实际调用时能够有下面的形式: printf("%d",i); printf("%s",s); printf("the number is %d ,s

python可变參数调用函数问题

一直使用python实现一些想法,近期在使用python的过程中出现这样一个需求,定义了一个函数.第一个是普通參数.第二个是默认參数,后面还有可变參数,在最初学习python的时候,都知道非keyword可变參数和keyword可变參数两种,调用的方式或许多种多样,这里主要提出一个比較隐含的问题.并将各种可能出现的情况进行了探讨. 函数声明格式 python尽管不支持函数重载,可是通过对函数參数的众多特性的支持基本弥补了. 函数声明的通式例如以下: def func(argv1,argv2...

宏定义之二(连接符,可变參数,文件名称,行号,函数名)

宏的高级使用--##,__VA_ARGS__, __FILE__, __FUNCTION__等 转自 http://blog.csdn.net/yiya1989/article/details/7849588 先说一下本文中会提到的内容:##,__VA_ARGS__, __FILE__, __LINE__ , __FUNCTION__等 宏变量: 先举一个样例,会用到上面这些宏: [cpp] view plaincopy #define myprintf(...) printk("[lch]:F

可变參数列表

再c++里有函数重载.在c里有可变參数列表,用stdarg宏实现定义在<stdarg.h>的头文件里,当中有3个宏:va_start(va_list的变量名,省略号前最后一个有名字的參数)用于初始化,va_arg(va_list的变量名,可变參数类型)用于取出可变參数.va_end(va_list的变量名)用于表明结束取值.用va_list声明一个类型为va_list的变量如arg #include<stdio.h> #include<stdarg.h> float a