如何看网站是用什么框架做的,手机做网站用什么,提交谷歌网站,网页设计要用到什么软件一、卡牌游戏 
1. 审题 
题目描述 A , B , C A,B,C A,B,C 三人在玩一个卡牌游戏#xff0c;规则如下#xff1a; 游戏开始时#xff0c; 3 3 3 人分别会得到若干张手牌, 每张牌上写着 a#xff0c;b#xff0c;c 中某一个字母。手牌的顺序严格按照输入顺序排列#xff0c…一、卡牌游戏 
1. 审题 
题目描述 A , B , C A,B,C A,B,C 三人在玩一个卡牌游戏规则如下 游戏开始时 3 3 3 人分别会得到若干张手牌, 每张牌上写着 abc 中某一个字母。手牌的顺序严格按照输入顺序排列不允许改变顺序。 游戏从  A A A 开始出牌。如果轮到某人的回合且这个人手上有牌他必须出自己手上的第  1 1 1 张牌之后轮到这张牌的写着的字母同名的人出牌例如出 a 牌之后就轮到  A A A 的回合。 如果轮到某人的回合且这个人手没有牌这个人就是赢家。 三人的起始手牌以字符串  S A S_A SA S B S_B SB S C S_C SC 的形式给出字符串开头是第1张牌。 输入描述 三行分别是字符串  S A S_A SA S B S_B SB S C S_C SC 。 输出描述 输出胜出者 样例1 输入 aca
accc
ca输出 A样例2 输入 abcb
aacc
bbcc输出 C提示 所有字符长度   100 100 100。 2. 思路 
2.1 暴力模拟 
首先我们应该想到的是用数组或者 string 存储每个人手上的牌。为了更方便我们用 string 存储。 
然后我们就要开始模拟游戏的过程了。我们可以分析一下样例  1 1 1 的游戏过程 A A A 出牌 a之后轮到  A A A A A A 出牌 c之后轮到  C C C C C C 出牌 c之后轮到  C C C C C C 出牌 a之后轮到  A A A A A A 出牌 a之后轮到  A A A 
此时  A A A 手上已经没有牌了 A A A 是赢家。 
最后我们写出初始的代码。 
2.2 技巧模拟 
暴力模拟得到  T L E TLE TLE 的结果我们尝试换一种思路作答。 
我们要定义六个变量分别是三个人手上的牌和三个人出牌的下标。 
每次出牌的时候将出牌的下标都   1 1 1表示应该出哪一张牌这样下一次出牌可以直接写 ?[l?]。 
3. 参考答案 
3.1 初试 
#include iostream
#include string
using namespace std;string card[5];
char now;
int player;int main()
{// 输入每个人手上的牌cin  card[1]  card[2]  card[3];// 模拟打牌while (card[1] !   card[2] !   card[3] ! ){if (now  a){player  1;}if (now  b){player  2;}if (now  c){player  3;}card[player].erase(0, 1);now  card[player][0];}// 输出最后一个玩家cout  toupper(now);return 0;
}结果 T L E TLE TLE C P U − T i m e − L i m i t − E x c e e d e d CPU-Time-Limit-Exceeded CPU−Time−Limit−Exceeded 
3.2 死循环思路 
#include iostream
#include string
using namespace std;string a, b, c;
int la  -1, lb  -1, lc  -1;int main()
{// 输入每个人手上的牌cin  a  b  c;// 模拟打牌la;char card  c[la];while (true){if (card  a){if (la  1  a.length()) // A没有牌了{cout  A;break;}la;card  a[la];}else if (card  b){if (lb  1  b.length()) // B没有牌了{cout  B;break;}lb;card  b[lb];}else{if (lc  1  c.length()) // C没有牌了{cout  C;break;}lc;card  c[lc];}}return 0;
}结果 
AC: 90%WA: 10% 
错误样例 
输入期待输出你的输出aca accc caAC 
二、移动距离 
题目描述 X X X 星球居民小区的楼房全是一样的并且按矩阵样式排列。其楼房的编号为  1 , 2 , 3 , ⋯ 1,2,3,⋯ 1,2,3,⋯。当排满一行时从下一行相邻的楼往反方向排号。 比如当小区排号宽度为6时开始情形如下 1  2  3  4  5  6
12 11 10 9  8  7
13 14 15 .....我们的问题是已知了两个楼号  m m m 和  n n n需要求出它们之间的最短移动距离。不能斜线方向移动 输入描述 输入为  3 3 3 个整数  w , m , n w,m,n w,m,n空格分开都在  1 1 1 到  1 0 4 10^4 104 范围内。 w w w 为排号宽度  m , n m,n m,n 为待计算的楼号。 输出描述 要求输出一个整数表示  m m m 与  n n n 两楼间最短移动距离。 样例1 输入 6 8 2输出 4二、思路 
1234561123456212111098731314151617184242322212019 w  6 w6 w6 求  m − n m-n m−n的最短移动距离在数学中也就是求  m m m 和  n n n 的曼哈顿距离。 
也就是说我们要将  m m m 的  x 1 x_1 x1、 y 1 y_1 y1 求出并将  n n n 的  x 2 x_2 x2、 y 2 y_2 y2 求出再做一次运算 a n s  ∣ x 1 − x 2 ∣  ∣ y 1 − y 2 ∣ ans|x_1-x_2||y_1-y_2| ans∣x1−x2∣∣y1−y2∣ 
求行方法 
if (m % w  0)
{x  m / w;
}
else
{x  m / w  1;
}求列方法 
if (x % 2  0) // 偶数行 右→左排列
{if (m % w  0){y  1;}else{y  w - m % w  1;}
}
else // 奇数行 左→右排列
{if (m % w  0){y  w;}else{y  m % w;}
}3. 参考答案 
#include iostream
#include cmath
using namespace std;int findx(int w, int m)
{int x;if (m % w  0){x  m / w;}else{x  m / w  1;}return x;
}int findy(int w, int m, int x)
{int y;if (x % 2  0){if (m % w  0){y  1;}else{y  w - m % w  1;}}else{if (m % w  0){y  w;}else{y  m % w;}}return y;
}int main()
{int w, m, n;int x1, y1, x2, y2;cin  w  m  n;x1  findx(w, m);x2  findx(w, n);y1  findy(w, m, x1);y2  findy(w, n, x2);cout  abs(x1-x2)  abs(y1-y2);return 0;
}