思路:
1.我们需要先输入9个数字,然后把它们存储起来方便自己后面去使用它们.
2.因为真正的数字是1-9 但当我们输入9个数字后,总有一个是0,根据题意,0表示直接可见的数字,但它并不是真值,那么0到底代表什么? 可以把问题分解出来.
1-9的数字 你输入了8个 但一共要输入9个数字 但里面必须有一个是0 所以 0代表的是你输入的8个数字中在1-9中没出现的那个数字.
比如你输入了 1 3 4 5 6 7 8 9 0 那么 2在前8个字符中没出现过,所以0的真值是2,在后续的按要求输出中,这个真值是需要用上的.
寻找真值解决办法:
给1-9设立Bool值 初始为True 每当输入一个数字 就把 这个数字对应的Bool值设置为false
最后历遍这个bool数组,只要找到最后一个为True的值,那就是我们需要找到的真值.
然后我们可以对它进行替换操作,把0替换为它的真值,你只需要在接收到0的时候标记它在数组中的位置即可.
3.建立一个变量,用于接收2个int值,再将它们转化为一位数组的位置 (转化方法请详细看代码)
4. 输出它们并换行(满足题目输出要求)
5.决定 行积分 列积分 与 主/副对角线积分和 方法是找到二维在一维度的初始值,直接用迭代的方法把结果算出来(详见代码)
代码如下:
#include<iostream>
#include<vector>
using namespace std;
int main() {
int max = 9;
vector<int> s; // 存储9位数字
int temp_s[] = { 1,2,3,4,5,6,7,8,9 };
bool temp_s2[] = { 1,1,1,1,1,1,1,1,1 }; //与temp_s一起用 s2表示状态值
int temp_i = -1;// 存储可见0在一维数组上的位
while (max--) {
int a;
cin >> a;
s.push_back(a);
for (int i = 0; i < 9; i++) {
if (a == temp_s[i]) {
temp_s2[i] = 0; //更新状态值
break;
}
}
if (a == 0) {
temp_i = 8 - max ; // 位从0始计,记录0的位置
}
}
for (int k = 0; k < 9; k++) {
if (temp_s2[k] == 1) {
s[temp_i] = temp_s[k]; // 替换0的真值
break;
}
}
int q = 3; //刮3个位置
vector <int> daan; // 存储 坐标所对应的真值
while (q--) { // 输入坐标 模拟它们在二维看来一维的位置 进行存储.
int w, e;
cin >> w >> e;
if (w == 1) {
daan.push_back(s[e - 1]);
}
else if (w == 2) {
daan.push_back(s[e + 2]);
}
else {
daan.push_back(s[e + 5]);
}
}
//while (q--) { // 如果你觉得上面的代码有点死板可以用这个.
// int w, e;
// cin >> w >> e;
// w = -1 + 3 * (w - 1);
// daan.push_back(s[e + w]);
//}
int fx;
cin >> fx; // 输入方向
for (int t : daan) {
cout << t << endl; // 输出坐标对应的真值
}
int sum = 0; //分数总值初始化
int temp_a = 3; // 固定的三次累加
int temp_f = fx - 4;//决定列
if (fx >= 1 && fx <= 3) { //选定3行中某一行
if (fx == 1) {
fx--;
}
else if (fx == 2) {
fx++;
}
else {
fx = 6;
}//为X重新赋值
while (temp_a--) {
sum += s[fx];
fx++;
}
}
else if (fx >= 4 && fx <= 6) {
while (temp_a--) {
sum += s[temp_f];
temp_f += 3;
}
}
else if (fx == 7) { // 主对角线 在一维的关系中就是二维3x3中换算的0 4 8 的+4关系
int sq = 0;
while (temp_a--) {
sum += s[sq];
sq += 4;
}
}
else {// 副对角线 在一维的关系中就是二维3x3中换算的2 4 6 的+2关系
int sq = 2;
while (temp_a--) {
sum += s[sq];
sq += 2;
}
}
int daan2[19] = { 10000,36,720,360,80,252,108,72,54,180,72,180,119,36,306,1080,144,1800,3600 }; // 积分大全
cout << daan2[sum-6]; // 从6开始算奖励 所以-6
}