数学竞赛预测

 3位老师对数学竞赛进行了预测。他们的预测如下:
甲说:学生 a 得第一名,学生 b 得第三名。
乙说:学生 c 得第一名,学生 d 得第四名。
丙说:学生 d 得第二名,学生 a 得第三名。

竞赛结果表明,他们都说对了一半,说错了一半,并且无并列名次,编程求出a,b,c,d各自的名次。

分析:

信息数字化:我们令a,b,c,d 分别表示学生A,B,C,D 的名次,然后暴力枚举,同时判断
是否满足要求:他们都说对了一半,说错了一半。
对于甲老师的信息,可以数字化为:( a == 1 ) + ( b == 3 ) == 1.
对于表达式 :a == 1, 若 a 为 1 ,则此表达式的值为1,否则为0。于是,上面的式子就不难理解了。

代码:

#include <iostream>
using namespace std ;
int main()
{
	int a , b , c , d ;
	for( a = 1 ; a <= 4 ; a++ ) {			//枚举 a  
		for( b = 1 ; b <= 4 ; b++ )			//枚举 b  
			if( a != b )					//要求 a != b  
				for( c = 1 ; c <= 4 ; c++ )	//枚举 c  
					if( c != a && c != b ) {		// c != a 且 c != b  
						d = 10 - a - b - c ;
						if( ( a == 1 ) + ( b == 3 ) == 1
						 && ( c == 1 ) + ( d == 4 ) == 1
						 && ( d == 2 ) + ( a == 3 ) == 1 )
						 	cout << "a = " << a << ", "
						 	 	 << "b = " << b << ", "
						 		 << "c = " << c << ", "
						 		 << "d = " << d << endl ;
					}
	} 
	return 0 ;
}

运行结果:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值