假金币问题-PKUacm1029-ACM

简介: 假金币 “Gold Bar”银行收到可靠消息:在前次的N 个金币中有一枚重量不同的假金币(其他金币的重量都相同)。经济危机之后他们只有一台天平可用。用这台天平,可以称量出左边托盘中的物体是轻于、重于或等于右边托盘中的物体。

假金币

“Gold Bar”银行收到可靠消息:在前次的N 个金币中有一枚重量不同的假金币(其他金币的重量都相同)。经济危机之后他们只有一台天平可用。用这台天平,可以称量出左边托盘中的物体是轻于、重于或等于右边托盘中的物体。

为了分辨出假金币,银行职员将所有的金币编为1到N号。然后用天平称量不同的金币组合,每次仔细记载称量金币的编号和结果。

现在要求你编写一个程序,帮助银行职员根据称量记录来找出假金币的编号。

 

输入:

 第一行输入两个空格隔开的整数N和K,N是金币的总数(2<=N<=1000 ) , K是称量的次数(1<=K<=100)。随后的2K行记录称量的情况和结果,连续两行记录一次称量:第一行首先是Pi (1<=Pi<=N/2),表示两边托盘中放置的金币数目,随后是左边托盘中Pi个金币编号和右边托盘中Pi个金币编号,所有的数之间都由空格隔开;第二行用'<','>','='和记录称量结果:

  •  '<'表示左边托盘中的金币比右边的轻;
  •   '>'表示左边托盘中的金币比右边的重;
  •  '='表示左右两边托盘中的金币一样重。

 

输出:

输出假金币的编号。如果根据称量纪录无法确定假金币,输出0。

输入样例:

5 3
2 1 2 3 4
< 
1 1 4
=
1 2 5
= 

输出样例:

3


 

#include <stdio.h>
int ids[126][1024];
int op[126];
int n,k;

bool isTrue(int id){
	int i;
	bool isTrue = false;
	for(i=0;i < k;i++){
		int j;
		bool found;
		found = false;
		for(j = 1;j<=(ids[i][0]<<1);j++){
			if(ids[i][j] == id){
				found = true;
				break;
			}
		}
		if(found && op[i] == '=' || !found && op[i]!='='){	
			//如果找到了,并且实验结果为相等。
			//或者,未找到,且实验结果不等(即有问题的金币在当前组中)
			//则id编号的金币一定是为真的金币
			isTrue = true;
			break;
		}
	}
	return isTrue;
}

int main(){

	scanf("%d%d",&n,&k);		//输入金币数和测试数据组数
	if(!(2<=n && n <=1000) || !(1 <= k && k <= 100)){
		return 1;
	}
	int i,j;
	for(i = 0;i < k;i++){
		scanf("%d",&ids[i][0]);					//输出本次实验每个盘上放置的金币个数
		for(j = 1;j <= (ids[i][0]<<1);j++){
			scanf("%d",&ids[i][j]);				//依次输入金币编号
		}
		scanf("%*c%c",&op[i]);
	}

	
	//从第1个金币开始,迭代校验第i个金币是否为真
	for(i = 1; i <= n ;i++){
		if(!isTrue(i)){
			//false_id = i;
			break;
		}
	}
	printf("%d",i);
	return 0;
}


 

 

目录
相关文章
|
6月前
|
弹性计算 运维 Shell
统计双色球各个数字的中奖概率
【4月更文挑战第29天】
147 1
P1865 A % B Problem(欧拉筛,永远的神)
P1865 A % B Problem(欧拉筛,永远的神)
52 0
|
算法
算法题每日一练---第24天:海盗分金币
5 个海盗,相约进行一次帆船比赛。比赛中天气发生突变,他们被冲散了。
273 0
算法题每日一练---第24天:海盗分金币
算法练习Day44|70. 爬楼梯 (进阶)● 322. 零钱兑换 ● 279.完全平方数
算法练习Day44|70. 爬楼梯 (进阶)● 322. 零钱兑换 ● 279.完全平方数
|
数据采集 数据挖掘 Python
【每周一坑】验证哥德巴赫猜想
尽管对于大多数人来说,无法看懂哥德巴赫猜想及相关问题的证明。不过我们借助计算机,可以快速地判断一个数是否符合哥德巴赫猜想。(只需在判断质数的代码基础上加上两三行。)
ACM训练题目【糖果传递】
ACM训练题目【糖果传递】
66 0
ACM训练题目【糖果传递】
|
Java
Java锤子剪刀布大家应该都会玩“锤子剪刀布”的游戏: 现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。
Java锤子剪刀布大家应该都会玩“锤子剪刀布”的游戏: 现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。
162 0
|
Shell
一维数组实验题:大奖赛现场统分。已知某大奖赛有n个选手参赛,m(m>2)个评委为参赛选手评分(最高10分,最低0分)。统分规则为:在每个选手的m个得分中,去掉一个最高分和一个最低分后,取平均分作为该选
一维数组实验题:大奖赛现场统分。已知某大奖赛有n个选手参赛,m(m>2)个评委为参赛选手评分(最高10分,最低0分)。统分规则为:在每个选手的m个得分中,去掉一个最高分和一个最低分后,取平均分作为该选
510 0
|
人工智能 BI
L3-001 凑零钱 (30 分)
L3-001 凑零钱 (30 分)
155 0