硬币问题poj1013简单模拟

有12枚硬币。其中有11枚真币和1枚假币。假币和真币重量不同,但不知道假币比真币轻还是重。现在,用一架天平称了这些币三次,告诉你称的结果,请你找出假币并且确定假币是轻是重(数据保证一定能找出来)。
输入样例:
ABCD EFGH even
ABCI EFJK upABIJ EFGH even
输出样例:
K is the counterfeit coin and it is light.

题解
题目的意思是找出假币,然后判断假币的重量与真币大小,但是想要找到
假币的方法是判定,所以我们应该一个一个枚举,利用假设法来判断
假设这是假币,看看是不是不满足三个条件,然后进行判断,如果都满足
那么就对了。
代码如下:

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
char l[3][7],r[3][7];
char j[3][4];
bool isfake(char c,bool light);
int main() {
    int t;
    cin>>t;
    while(t--) {
        for(int i=0; i<3; i++) {
            cin>>l[i]>>r[i]>>j[i];
        }
        for(char c='A'; c<'L'; c++) {
            if (isfake(c, true))
			{
				cout << c << " is the counterfeit coin and it is light." << endl;
				break;
			}
			if (isfake(c, false))
			{
				cout << c << " is the counterfeit coin and it is heavy." << endl;
				break;
			}
		}

        }
}




bool isfake(char c,bool light) {
    for(int i=0; i<3; i++) {
        char *pl,*pr;
        if(light) {
            pl=l[i];
            pr=r[i];
        } else {
            pl=r[i];
            pr=l[i];
        }
        switch(j[i][0]) {
        case 'u':
            if(strchr(pr,c)==NULL)
                return false;
            break;
        case 'e':
                if(strchr(pl,c)||strchr(pr,c))
                    return false;
            break;
        case 'd':
            if(strchr(pl,c)==NULL)
            return false ;
            break;

        }

    }
    return true;



}

代码是来自北京大学郭老师的算法基础课程例题解,

char *strchr(const char * _Str,char _Val)
功能:查找字符串_Str中首次出现字符_Val的位置
说明:返回首次出现_Val的位置的指针,返回的地址是被查找字符串指针开始的第一个与Val相同字符的指针,如果Str中不存在Val则返回NULL。
返回值:成功则返回要查找字符第一次出现的位置,失败返回NULL

本片作为作者本人使用笔记,他人勿喷。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值