ACM必做50题——模拟

1、POJ 1029 False coinSlyar:又是假币判断问题,跟POJ1013类似,不过这个题用1013那个算法W A了...后来换了种枚举的算法才过...思路就是假币应该在每个不等式中都出现,最后只要看哪个硬币出现的次数和不等式出现的次数相同,如果这个硬币唯一,那它就是确认的假币。

#include <iostream>#include <string>using namespace std;const int MAX = 1001;int main(){int n, k, p, total = 0;char sign;/* 记录原始数据*/int t[MAX] = {0};/* 标记硬币真假*/int r[MAX] = {0};/* 记录硬币重量*/int w[MAX] = {0};cin >> n >> k;while (k--){/* 读入原始数据*/cin >> p;for (int i = 0; i < 2 * p; i++){cin >> t[i];}cin >> sign;/* 标记肯定为真的硬币*/if (sign == '='){for (int i = 0; i < 2 * p; i++){r[t[i]] = 1;}}/* 左轻右重*/else if (sign == '<'){total++;for (int i = 0; i < p; i++){w[t[i]]--;}for (int i = p; i < 2 * p; i++){w[t[i]]++;}}/* 左重右轻*/else if (sign == '>'){total++;for (int i = 0; i < p; i++){w[t[i]]++;}for (int i = p; i < 2 * p; i++){w[t[i]]--;}}}/* 假币在不等式中每次都应该出现*/ int count = 0, pos = 0;for (int i = 1; i <= n; i++){if (r[i]){continue;}/* 找出每次都出现的"假币" */if (w[i] == total || w[i] == - total){count++;pos = i;}}2、poj 1013 Counterfeit Dollar关于称硬币的问题:此题中赛利已经设计了正确的称量方案,保证从三组称量数据中能得到唯一的答案。

答案可以用两个变量表示:x 假币的标号、w 假币是比真币轻还是比真币重。

x 共有12 种猜测;w 有2 种猜测。

根据赛利设计的称量方案,(x,w )的24 种猜测中,只有唯一的猜测与三组称量数据都不矛盾。

因此,如果猜测(x,w )满足下列条件,这个猜测就是要找的答案:在称量结果为"even'' 的天平两边,没有出现x ;如果w 表示假币比真币轻,则在称量结果为"up'' 的天平右边一定出现x、在称量结果为"down'' 的天平左边一定出现x如果w 表示假币比真币重,则在称量结果为"up'' 的天平左边一定出现x、在称量结果为"down'' 的天平右边一定出现x具体实现时,要注意两点:1) 选择合适的算法对于每一枚硬币x 逐个试探:x 比真币轻的猜测是否成立?猜测成立则进行输出。

x 比真币重的猜测是否成立?猜测成立则进行输出。

2) 选择合适的数据结构以字符串数组存储称量的结果。

每次称量时,天平左右最多有6 枚硬币。

因此,字符串的长度需要为7,最后一位存储字符串的结束符’\0’,便于程序代码中使用字符串操作函数。

char left[3][7], right[3][7], result[3][7];#include <stdio.h>#include <string.h>char left[3][7], right[3][7], result[3][5];int islight( char x ) {int i;for ( i = 1; i <= 3; i++ )switch( result[i][0] ) {case 'u': if( strchr(right[i], x) == NULL ) return 0;break;case 'e': if(strchr(right[i], x) != NULL || strchr(left[i], x) != NULL) return 0;break;case 'd': if(strchr(left[i], x) == NULL) return 0;break;}return 1;}int isheavy( char x ){int i;for ( i = 1; i <=3; i++ )switch( result[i][0] ) {case 'u': if( strchr(left[i], x) == NULL) return 0;break;case 'e': if(strchr(right[i], x) != NULL || strchr(left[i], x) != NULL) return 0;break;case 'd': if(strchr(right[i], x) == NULL) return 0;break;}return 1;}int main(){int i,j,n;char c;scanf("%d",&n);while(n--){for(i=1; i<=3; i++)scanf("%s %s %s",left[i],right[i],result[i]);for(c='A'; c<='L'; c++){if(islight(c)){printf("%c is the counterfeit coin and it is light.\n",c);break;}if(isheavy(c)){printf("%c is the counterfeit coin and it is heavy.\n",c);break;}}}return 0;}/* 假币唯一则输出*/if (count != 1){cout << 0 << endl;}else{cout << pos << endl;}//system("pause");return 0;}3、poj 1083 Moving Tables就是把这400个房间分成200分,1-2,3-4,。

每次移动时,都要把经过的“份”算上,这样最后找份中最大的那个数即可#include <iostream>#include <climits>#include <cstring>#define SIZE 220using namespace std;void swapnum(int &a,int &b);int getindex(int k);int main (){int t,n;cin>>t;while(t--){cin>>n;int x,y;int cross[SIZE];memset(cross,0,sizeof(cross));for(int i=0;i<n;++i){cin>>x>>y;int start,end;if(x>y){swapnum(x,y);}start=getindex(x);end=getindex(y);for(int i=start;i<=end;++i){cross[i]++;}}int maxnum=INT_MIN;for(int i=0;i<SIZE;++i){maxnum=maxnum>cross[i]?maxnum:cross[i];}cout<<maxnum*10<<endl;}return 0;}void swapnum(int &a,int &b){int temp=a;a=b;b=temp;}int getindex(int k){if(k%2==0){return k/2;}else if(k%2==1){return k/2+1;}}4、poj 2028 When Can We Meet?题意:ICPC委员会要安排一个会议,但是成员们都太忙了,所以很难安排,所以要我们编程找个最合适的日子让更多的人来参加这个会议。

一共有N个人,至少要Q个人参加,第i个人有mi天是有空的,分别是date1,date2…..datem,表示明天开始的第datei天,比如date1为1表示明天有空,date2为2表示后天有空,……要输出最好的那天,要求是参加的人尽可能多,如果用相同人数的要尽量靠前。

思路:从第1到max开始枚举,看多少人在第i天有空,如果用>=q的人有空的话,把人数跟i记录下来,放在结构体数组里,最后按人数从大到小排序,如果最大的那个的人数<q 的话输出0,否则就是最大的那个,还要日子靠前的那个。

Max是这么多人的有空的日子里最晚的那天,#include <stdio.h>#include <string.h>#include <stdlib.h>#define N 55#define M 105typedef struct{int index;int count;}item;item items[M];int cmp(const void *p, const void *q){return (*(int *)p) - (*(int *)q);}int cmp2(const void *p, const void *q){item *a = (item *)p;item *b = (item *)q;if(a->count > b->count)return -1;else if(a->count < b->count)return 1;else{return a->index > b->index ? 1 : -1;}}int main(){int i, j, k;int size, quorum, dateNum, result, count, max;int dates[N][M];int *find;while(scanf("%d%d", &size, &quorum) && size && quorum){memset(dates, 0, sizeof(dates));memset(items, 0, sizeof(items));max = 0;for(i=0; i<size; i++){scanf("%d", &dates[i][0]);for(j=1; j<=dates[i][0]; j++){scanf("%d", &dates[i][j]);if(max < dates[i][j])max = dates[i][j];}}for(i=1, k=0; i<=max; i++){for(j=0, count=0; j<size; j++){find = (int *)bsearch(&i, dates[j]+1, dates[j][0], sizeof(dates[j][1]), cmp);if(find != NULL){count++;}}if(count >= quorum){items[k].count = count;items[k].index = i;k++;}if(count == size)break;}qsort(items, k, sizeof(items[0]), cmp2);if(items[0].count >= quorum)printf("%d\n", items[0].index);else printf("0\n");}return 0;}5 、poj 2234 Matches Game 异或的问题不是很理解,没办法强记策略尼姆博奕(Nimm Game):有n堆各若干个物品,两个人轮流从某一堆取任意多(或者最多m个,只需把每堆%m)的物品,规定每次至少取一个,多者不限,最后取光者得胜。

合集下载

acm数学竞赛试题

acm数学竞赛试题

acm数学竞赛试题
ACM数学竞赛试题通常涉及各种数学领域,包括但不限于代数、几何、概率统计和组合数学等。

以下是一些经典的ACM数学竞赛试题:
1. 平面上n个点的k距离和最小值问题:给定平面上n个点,对于每个点,计算它到其他所有点的距离,然后求出这些距离中的k个最小值。

问题是:如何有效地计算这k个最小值?
2.最长公共子序列问题:给定两个序列,找出它们的最长公共子序列。

例如,对于序列
A = [1, 2, 3, 4] 和
B = [2, 3, 4, 5],最长公共子序列是[2, 3, 4]。

3. 凸包问题:给定平面上的一组点,找到一个最小的凸多边形,使得这个多边形能够包含这组点中的所有点。

4. 最短路问题:给定一个有向图,其中每条边都有一个非负的权重,找出图中任意两点之间的最短路径。

5. 子集和问题:给定一个正整数数组和一个目标值,判断数组中是否存在和为目标值的两个非空子集。

例如,给定数组[1, 2, 3, 4] 和目标值7,判断是否存在两个子集,它们的和分别为7。

以上只是ACM数学竞赛试题的一部分,实际上还有更多涉及数学各个领域的题目。

要提高解决这类问题的能力,需要不断练习和研究。

计算机acm试题及答案

计算机acm试题及答案

计算机acm试题及答案一、选择题1. 在计算机科学中,ACM代表什么?A. 人工智能与机器学习B. 计算机辅助制造C. 计算机辅助设计D. 国际计算机学会答案:D2. 下列哪个不是计算机程序设计语言?A. PythonB. JavaC. C++D. HTML答案:D3. 在计算机系统中,CPU代表什么?A. 中央处理单元B. 计算机辅助设计C. 计算机辅助制造D. 计算机辅助教学答案:A二、填空题1. 计算机的内存分为__________和__________。

答案:RAM;ROM2. 在编程中,__________是一种用于存储和操作数据的数据结构。

答案:数组3. 计算机病毒是一种__________,它能够自我复制并传播到其他计算机系统。

答案:恶意软件三、简答题1. 请简述计算机操作系统的主要功能。

答案:计算机操作系统的主要功能包括管理计算机硬件资源,提供用户界面,运行应用程序,以及控制其他系统软件和应用软件的运行。

2. 什么是云计算,它与传统的本地计算有何不同?答案:云计算是一种通过互联网提供计算资源(如服务器、存储、数据库、网络、软件等)的服务模式。

与传统的本地计算相比,云计算允许用户按需获取资源,无需购买和维护物理硬件,具有更高的灵活性和可扩展性。

四、编程题1. 编写一个程序,计算并输出从1到100(包括1和100)之间所有偶数的和。

答案:```pythonsum = 0for i in range(1, 101):if i % 2 == 0:sum += iprint(sum)```2. 给定一个字符串,编写一个函数,将字符串中的所有字符按ASCII 码值排序并返回。

答案:```pythondef sort_string(s):return ''.join(sorted(s))```五、论述题1. 论述计算机硬件和软件之间的关系及其对计算机系统性能的影响。

答案:计算机硬件是计算机系统的物质基础,包括CPU、内存、硬盘等,而软件则是运行在硬件上的程序和数据。

ACM题目、测试用例及参考答案汇编——一次ACM协会内部测试

ACM题目、测试用例及参考答案汇编——一次ACM协会内部测试

ACM题目、测试用例及参考答案汇编——一次ACM协会内部测试第一题:梦境是虚幻吗?时间限制:3000ms 内存限制:65535KB 难度:★★描述《盗梦空间》是一部精彩的影片,在这部电影里,Cobb等人可以进入梦境之中,梦境里的时间会比现实中的时间过得快得多,这里假设现实中的3分钟,在梦里就是1小时。

然而,Cobb他们利用强效镇静剂,可以从第一层梦境进入第二层梦境,甚至进入三层,四层梦境,每层梦境都会产生同样的时间加速效果。

那么现在给你Cobb在各层梦境中经历的时间,你能算出现实世界过了多长时间吗?比如,Cobb先在第一层梦境待了1个小时,又在第二层梦境里待了1天,之后,返回第一层梦境之后立刻返回了现实。

那么在现实世界里,其实过了396秒(6.6分钟)输入第一行输入一个整数T(0<=T<=100),表示测试数据的组数。

每组测试数据的第一行是一个数字M(3<=M<=100)随后的M行每行的开头是一个字符串,该字符串如果是"IN" 则Cobb向更深层的梦境出发了,如果是字符串"OUT"则表示Cobb从深层的梦回到了上一层。

如果是首字符串是"STAY"则表示Cobb在该层梦境中停留了一段时间,本行随后将是一个整数S表示在该层停留了S分钟(1<=S<=10000000)。

数据保证在现实世界中,时间过了整数秒。

输出对于每组测试数据,输出现实世界过的时间(以秒为单位)。

样例输入16INSTAY 60INSTAY 1440OUTOUT样例输出396测试输入106INSTAY 60INSTAY 1440OUTOUT6INININOUTOUTOUT7INININSTAY 0 OUTOUTOUT2INSTAY 203INSTAY 0 OUT3INSTAY 10 OUT4INSTAY 10 STAY 10 OUT5INSTAY 20 STAY 20 OUT STAY 120 10INSTAY 20 STAY 20 INSTAY 1440STAY 1440OUTSTAY 120OUTSTAY 11STAY 50测试输出39660306073209723000参考代码:#include<stdio.h>int main(){int n;char a[5];scanf("%d",&n);while(n--){int m,i,b=1,c,time=0;scanf("%d",&m);for(i=0;i<m;i++){scanf("%s",&a);if(a[0]=='I') b*=20;else if(a[0]=='S') {scanf("%d",&c);time+=c*60/b;} else if(a[0]=='O') b/=20;}printf("%d\n",time);}return 0;}第二题:独木舟过河时间限制:3000ms 内存限制:65535KB 难度:★★描述进行一次独木舟的旅行活动,独木舟可以在港口租到,并且之间没有区别。

acm编程比赛入门题目集

acm编程比赛入门题目集

最少钱币数:【问题描述】这是一个古老而又经典的问题。

用给定的几种钱币凑成某个钱数,一般而言有多种方式。

例如:给定了6种钱币面值为2、5、10、20、50、100,用来凑15元,可以用5个2元、1个5元,或者3个5元,或者1个5元、1个10元,等等。

显然,最少需要2个钱币才能凑成15元。

你的任务就是,给定若干个互不相同的钱币面值,编程计算,最少需要多少个钱币才能凑成某个给出的钱数。

【要求】【数据输入】输入可以有多个测试用例。

每个测试用例的第一行是待凑的钱数值M(1 <= M <= 2000,整数),接着的一行中,第一个整数K(1 <= K <= 10)表示币种个数,随后是K 个互不相同的钱币面值Ki(1 <= Ki <= 1000)。

输入M=0时结束。

【数据输出】每个测试用例输出一行,即凑成钱数值M最少需要的钱币个数。

如果凑钱失败,输出“Impossible”。

你可以假设,每种待凑钱币的数量是无限多的。

【样例输入】156 2 5 10 20 50 10011 2【样例输出】2Impossible/***************** 2010年5月19日*****************/#include<iostream>#include<string>using namespace std;int m[1000];int M;int p;int check() { //找出最少钱币数,并返回其值int b,c,d=0;int p=0;int i,j;int s[10];cin>>b;for( i=1;i<=b;i++)cin>>s[i];/*冒泡排序排出从大到小的钱币面额顺序*/ for( i=1;i<=b;i++)for(j=1;j<=b-i;j++)if(s[j]>s[j+1]){c=s[j];s[j]=s[j+1];s[j+1]=c;}/*尝试用最大面额的钱币开始凑某个价位,并尽量凑足此价位;如果剩余的价位差额可以用剩余的钱币面额凑到,且钱币用量最少,则凑到的原价位所需的钱币用量最少*/for( i=b;i>0;i--){while(M-s[i]>=0){M-=s[i];d++;}}if(M<=0)return d;elsereturn 0;}int main() {int q;/*用循环来解决多次输入样例*/do {cin>>M; q=M;if(q==0)break;p++;m[p]=check();//用数组存储凑成M的最少钱币数 }while(q>0);for(int j=1;j<=p;j++){if(m[j]==0)cout<<"Impossible"<<endl;elsecout<<m[j]<<endl;}return 0;}Feli 的生日礼物【问题描述】Felicia 的生日是11月1日(和Kitty是同一天生的哦)。

acm常用板子题

acm常用板子题

acm常用板子题
ACM常用模板题包括但不限于:
字符串操作:如字符串匹配、字符串排序、字符串还原等题目,需要熟练掌握字符串的基本操作和常用算法。

数组操作:如数组排序、数组查找、数组分割等题目,需要熟练掌握数组的基本操作和常用算法。

树形结构:如二叉树、AVL树、红黑树等题目,需要熟练掌握树形结构的基本操作和常用算法。

图论算法:如最短路径、最小生成树、拓扑排序等题目,需要熟练掌握图论算法的基本操作和常用算法。

动态规划:如背包问题、最长公共子序列、最长递增子序列等题目,需要熟练掌握动态规划的基本操作和常用算法。

搜索算法:如深度优先搜索、广度优先搜索等题目,需要熟练掌握搜索算法的基本操作和常用算法。

数据结构:如哈希表、并查集、线段树等题目,需要熟练掌握数据结构的基本操作和常用算法。

以上是一些常见的ACM模板题,当然还有很多其他的题目类型。

要提高自己的ACM水平,需要多做题、多思考、多总结,不断拓宽自己的算法和数据结构知识面。

程序员必做的50题

程序员必做的50题

【程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?【程序2】题目:企业发放的奖金根据利润提成。

利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1。

5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?【程序3】题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?【程序4】题目:输入某年某月某日,判断这一天是这一年的第几天?【程序5】题目:输入三个整数x,y,z,请把这三个数由小到大输出。

【程序6】题目:用*号输出字母C的图案。

【程序7】题目:将一个正整数分解质因数。

例如:输入90,打印出90=2*3*3*5。

【程序8】题目:输出9*9口诀。

【程序9】题目:要求输出国际象棋棋盘。

【程序10】题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?【程序11】题目:判断101-200之间有多少个素数,并输出所有素数.【程序12】题目:打印出所有的“水仙花数”,所谓“水仙花数"是指一个三位数,其各位数字立方和等于该数本身。

例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。

【程序13】题目:利用条件运算符的嵌套来完成此题:学习成绩〉=90分的同学用A表示,60-89分之间的用B表示,6 0分以下的用C表示.【程序14】题目:输入两个正整数m和n,求其最大公约数和最小公倍数。

【程序15】题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数.【程序16】题目:求s=a+aa+aaa+aaaa+aa。

acm竞赛试题及答案

acm竞赛试题及答案ACM(Association for Computing Machinery)竞赛是一项全球性计算机科学竞赛,旨在锻炼参赛者的问题解决能力和编程技巧。

每年都有数千名来自不同学校的学生参加这一挑战。

本文将提供一些最近的ACM竞赛试题以及相应的答案,帮助读者了解和学习竞赛题目的类型和解题思路。

1. 问题描述给定一个由N个整数组成的数组A,请编写一个程序,找出数组中两个不同元素的差的最小值。

2. 输入格式- 第一行包含一个整数N,表示数组A的长度。

- 第二行包含N个以空格分隔的整数,表示数组A中的元素。

3. 输出格式输出一个整数,表示数组中两个不同元素的差的最小值。

4. 示例输入:51 52 9 12输出:15. 解题思路该问题可以通过对数组进行排序,并比较相邻两个数的差值来求解。

首先,将数组A进行升序排序。

然后,遍历排序后的数组,依次计算相邻两个数的差值,并记录其中的最小值。

最后,返回这个最小差值即可。

6. 代码实现```pythondef min_difference(nums):nums.sort() # 对数组进行升序排序min_diff = float('inf') # 初始化最小差值为正无穷大for i in range(len(nums)-1):diff = abs(nums[i] - nums[i+1]) # 计算相邻两个数的差值min_diff = min(min_diff, diff) # 更新最小差值return min_diff# 输入处理N = int(input())A = list(map(int, input().split()))# 调用函数并输出结果result = min_difference(A)print(result)```7. 答案解析对给定的数组进行排序后,遍历数组计算相邻两个数的差值,并记录其中的最小值。

上述代码中,首先将数组A进行升序排序,然后使用一个变量`min_diff`来记录最小差值。

ACM选拔赛试题

ACM选拔赛试题
注意:程序文件命名为:Test+题号
1、已知四位数3025有一个特殊性质:它的前两位数30和后两位数25的和是55,而55的平方刚好等于该数(55*55=3025),编写一个程序求出所有的具有这种性质的四位数。

2、有的三位数很独特,它们每位上的数字互不相同且都不大于7,特别是十位数正好是百位数和个位数之差,编写程序求所有这样的三位数。

3、某电台组织一次智力竞赛,计划奖励30人。

准备了50件奖品,得一等奖者可得3件,二等奖可得2件,三等奖可得1件。

希望把所有奖品都发到获奖者手中,请编程找出所有的设奖方案(即各等奖各有多少人)。

4、修改31743的某一位数字,使之成为823的倍数。

5、在自然数中,各位数字之和的11倍正好等于自身的自然数只有一个,编写程序请找出这个自然数。

6、小明的妈妈是负责分发单位工资的。

为了使分发时有足够的零钞,同时又尽量不使每个人领到的钱太零碎。

每个月她都要计算出各种面值的钞票(100元、50元、20元、10元、5元、2元、1元)各需多少张。

假设每个人的工资都是整数元,你能否为她设计一个程序,从键盘输入10个人的工资,再计算各种面值的钞票各需多少张?
7、4名专家对四款赛车进行评论:
A说:2号赛车是最好的。

B说:4号赛车是最好的。

C说:3号赛车不是最佳赛车。

D说:B说错了。

事实上,只有一款赛车最佳,且只有一名专家说对了,其他3人说错了,请编程输出最佳赛车的车号,以及哪一位专家说对了。

北大 poj acm题目推荐50题

-北大poj acm题目推荐50题POJ == 北京大学ACM在线评测系统/JudgeOnline1. 标记难和稍难的题目大家可以看看,思考一下,不做要求,当然有能力的同学可以直接切掉。

2. 标记为A and B 的题目是比较相似的题目,建议大家两个一起做,可以对比总结,且二者算作一个题目。

3. 列表中大约有70个题目。

大家选做其中的50道,且每类题目有最低数量限制。

4. 这里不少题目在BUPT ACM FTP 上面都有代码,请大家合理利用资源。

5. 50个题目要求每个题目都要写总结,养成良好的习惯。

6. 这50道题的规定是我们的建议,如果大家有自己的想法请与我们Email 联系。

7. 建议使用C++ 的同学在POJ 上用G++ 提交。

8. 形成自己编写代码的风格,至少看上去美观,思路清晰(好的代码可以很清楚反映出解题思路)。

9. 这个列表的目的在于让大家对各个方面的算法有个了解,也许要求有些苛刻,教条,请大家谅解,这些是我们这些年的经验总结,所以也请大家尊重我们的劳动成果。

10. 提交要求:一个总文件夹名为bupt0xx (即你的比赛帐号), 这个文件夹内有各个题目类别的子目录(文件夹),将相应的解题报告放入对应类别的文件夹。

在本学期期末,小学期开始前,将该文件夹的压缩包发至buptacm@。

对于每个题目只要求一个POJxxxx.cpp 或POJxxxx.java (xxxx表示POJ该题题号) 的文件,注意不要加入整个project 。

11. 如果有同学很早做完了要求的题目,请尽快和我们联系,我们将指导下一步的训练。

下面是一个解题报告的范例:例如:POJ1000.cpp//考查点:会不会编程序。

//思路:此题要求输入两个数,输出两个数的和,我用scanf 和printf。

//提交情况:Wrong Answer 1次,忘了写printf()。

Compile Error 2次,选错了语言,由于C++ 和G++ 在iostream.h 的不用引用方法;少一个大括号。

ACM必做50题的解题-模拟

break;
}
return 1;
}
int main(){
int i,j,n;
char c;
scanf("%d",&n);
while(n--){
for(i=1; i<=3; i++)
scanf("%s %s %s",left[i],right[i],result[i]);
for(c='A'; c<='L'; c++){
1)选择合适的算法
对于每一枚硬币x逐个试探:
x比真币轻的猜测是否成立?猜测成立则进行输出。
x比真币重的猜测是否成立?猜测成立则进行输出。
2)选择合适的数据结构
以字符串数组存储称量的结果。每次称量时,天平左右最多有6枚硬币。因此,字
符串的长度需要为7,最后一位存储字符串的结束符’\0’,便于程序代码中使用字符串
{
int t,n;
cin>>t;
while(t--){
cin>>n;
int x,y;
int cross[SIZE];
memset(cross,0,sizeof(cross));
for(int i=0;i<n;++i){
cin>>x>>y;
int start,end;
if(x>y){
swapnum(x,y);
case 'u': if( strchr(left[i], x) == NULL) return 0;
break;
case 'e': if(strchr(right[i], x) != NULL || strchr(left[i], x) != NULL) return 0;
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档