蓝桥杯-洛谷刷题-day5(C++)(为未完成)
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.严格按照题目
上文的这个题目,刚开始的时候,因为是剪刀石头布就放松了,完全忽略了相等时的情况,没有对照题目,思虑不周,浪费了很多时间,如果写代码的时候严格对照题目,逐行逐句地将各种情况一一敲出来,大概率不会浪费没必要的时间。引以为戒。(~.~)