[笔记][中国大学mooc][程序设计与算法(二) 算法基础][枚举] POJ1013 称硬币

题目

在这里插入图片描述
在这里插入图片描述

代码

#include <stdio.h>
//判断硬币coin是否存在于这四枚硬币string[4]之中
int IsHere(char coin, char string[]){
	int cnt;
	for(cnt = 0; cnt < 4; cnt++) if(string[cnt] == coin) return 1;
	return 0;
}
//假设硬币coin是light or not light,三次测量结果left[][], right[][],result[][]判断假设是否符合测量结果
int IsFake(char coin, int light, char left[][7], char right[][7], char result[][7]){
	int cnt;
	for(cnt = 0; cnt < 3; cnt++){
		if(light){
			if(result[cnt][0] == 'e')
				{if(IsHere(coin, left[cnt]) || IsHere(coin, right[cnt])) return 0;}
			if(result[cnt][0] == 'u')
				{if(IsHere(coin, left[cnt]) || !IsHere(coin, right[cnt])) return 0;}
			if(result[cnt][0] == 'd')
				{if(!IsHere(coin, left[cnt]) || IsHere(coin, right[cnt])) return 0;}
		}
		else{
			if(result[cnt][0] == 'e')
				{if(IsHere(coin, left[cnt]) || IsHere(coin, right[cnt])) return 0;}
			if(result[cnt][0] == 'u')
				{if(!IsHere(coin, left[cnt]) || IsHere(coin, right[cnt])) return 0;}
			if(result[cnt][0] == 'd')
				{if(IsHere(coin, left[cnt]) || !IsHere(coin, right[cnt])) return 0;}
		}
	}
	return 1;
}
int main(){
	char left[3][7];
	char right[3][7];
	char result[3][7];
	char coin;
	scanf("%s %s %s", left, right, result);
	scanf("%s %s %s", left[1], right[1], result[1]);
	scanf("%s %s %s", left[2], right[2], result[2]);
	//枚举假币所有可能的情况
	for(coin = 'A'; coin <= 'L'; coin++){
		if(IsFake(coin, 0, &left, &right, &result)){
			printf("%c is the counterfeit coin and it is heavy.", coin);
			break;	
		}
		else if(IsFake(coin, 1, &left, &right, &result)){
			printf("%c is the counterfeit coin and it is light.", coin);
			break;
		}
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值