// A1042 shuffling machine.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
考察:
1、洗牌机 + 用公式对应花色以及牌号
learn && wrong
1、不要定义名字相近的
2、用char型数组与花色对应起来的公式,真的好强
3、return 0;
4、star[i]没有减减
5、输出一直错,start[i]余上13而不是除以,难怪提示错误
6、已有运行主题原来是两个main,我居然没看到
7、shart数组,初试化的编号,这里就错了,i必须从1开始,所以,end和next都必须从1开始
8、答案里的输出,i != 1输出输出空格,然后它从1开始,也就是第一个不输出,之后都是空格 + 数字,所以最后没有空格, 用之前书里那个也可以
9、老老实实一步一步调试,比猜答案慢慢改更快!
10、花色有J?大王小王!我服了,这种长答案记得把答案copy出文件来一一对应
include <iostream>
using namespace std;
/*编程思想
1、首先一数组,初试化原先的位置
2、按给定位置顺序存入一个next数组,
将start按位置顺序,存入end[]中,用end[]重新装入star[],重复k次
3、用char型数组与花色对应起来的公式,以及编号在13范围内循环的公式
*/
const int num = 54;
char mp[5] = { 'S','H', 'C','D','J' };
int main()
{
int start[num + 1] = { 0 };
int next[num + 1] = { 0 };//要存放的位置
int end[num + 1] = { 0 };//临时位置
for (int i = 1; i <= num;i++) { //shart数组,初试化的编号,这里就错了,i必须从1开始
start[i] = i;
}
int N;//n为轮数
cin >> N;
for (int i = 1;i <= num; i++) {
cin >> next[i];//要修改的位置录入
}
for (int j = 0;j < N;j++) {
for (int i = 1;i <= num;i++) {
end[next[i]] = start[i]; //修改临时位置
}
for (int i = 1;i <= num;i++) {
start[i] = end[i];//重新初始化start
}
}
//按格式输出,花色加数字,然后最后一个没有空格
for (int i = 1;i <= num;i++) {
start[i]--;
if (i < num) printf("%c%d ", mp[start[i] / 13], start[i] % 13 + 1);
else printf("%c%d", mp[start[i] / 13], start[i] % 13 + 1);
}
return 0;
}