1.P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布
i.题目
ii.代码
#include <iostream>
#include <string>
using namespace std;
int N, Na, Nb;
//0-"剪刀", 1-"石头", 2-"布", 3-"蜥", 4-"斯";
//单纯的两个数比较剪刀石头布,a赢了返回1,输了返回0,平手返回2
int compare(int a, int b)
{
if (a == 0)
{
switch (b)
{
case 0:
return 2;
break;
case 1:
return 0;
break;
case 2:
return 1;
break;
case 3:
return 1;
break;
case 4:
return 0;
break;
default:
break;
}
}
else if (a == 1)
{
switch (b)
{
case 0:
return 1;
break;
case 1:
return 2;
break;
case 2:
return 0;
break;
case 3:
return 1;
break;
case 4:
return 0;
break;
default:
break;
}
}
else if (a == 2)
{
switch (b)
{
case 0:
return 0;
break;
case 1:
return 1;
break;
case 2:
return 2;
break;
case 3:
return 0;
break;
case 4:
return 1;
break;
default:
break;
}
}
else if (a == 3)
{
switch (b)
{
case 0:
return 0;
break;
case 1:
return 0;
break;
case 2:
return 1;
break;
case 3:
return 2;
break;
case 4:
return 1;
break;
default:
break;
}
}
else if (a == 4)
{
switch (b)
{
case 0:
return 1;
break;
case 1:
return 1;
break;
case 2:
return 0;
break;
case 3:
return 0;
break;
case 4:
return 2;
break;
default:
break;
}
}
}
void testlan()
{
//分值
int sumA = 0, sumB = 0;
//输入三个整数
cin >> N >> Na >> Nb;
//输入A、B的序列
//首先,定义动态数组数组(最后要释放)
int* sqA = new int[Na];
int* sqB = new int[Nb];
//用temp暂存输入的每一个值
int temp;
for (int i = 0; i < Na; i++)
{
cin >> temp;
sqA[i] = temp;
}
for (int i = 0; i < Nb; i++)
{
cin >> temp;
sqB[i] = temp;
}
//开始比较
int pa = 0, pb = 0;//指针
for (int i = 0; i < N; i++)
{
if (compare(sqA[pa], sqB[pb]) == 1)
{
sumA++;
//cout << sqA[pa] << "对" << sqB[pb] << "结果为:" << compare(sqA[pa], sqB[pb]) << ' ' << "sumA:" << sumA << endl;
}
else if (compare(sqA[pa], sqB[pb]) == 0)
{
sumB++;
//cout << sqA[pa] << "对" << sqB[pb] << "结果为:" << compare(sqA[pa], sqB[pb]) << ' ' << "sumB:" << sumB << endl;
}
//pa,pb的环形递增(类比循环队列。。。)
pa = (pa + 1) % Na;
pb = (pb + 1) % Nb;
/*if (pa < Na)
pa++;
else if (pa == Na)
pa = 0;
if (pb < Nb)
pb++;
else if (pb == Nb)
pb = 0;*/
}
cout << sumA << ' ' << sumB << endl;
delete[] sqA, sqB;
}
int main()
{
testlan();
return 0;
}
2.严格按照题目
上文的这个题目,刚开始的时候,因为是剪刀石头布就放松了,完全忽略了相等时的情况,没有对照题目,思虑不周,浪费了很多时间,如果写代码的时候严格对照题目,逐行逐句地将各种情况一一敲出来,大概率不会浪费没必要的时间。引以为戒。(~.~)