PTA L1-072 刮刮彩票分数 20分 (一维做法) C++(g++)

思路:

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
}

一维数组在生活中有许多应用。下面列举一些例子: 1. 学生成绩管理 在学生成绩管理系统中,可以使用一维数组来存储学生的各科成绩,方便查询和计算平均等操作。 2. 库存管理 在库存管理系统中,可以使用一维数组来存储商品的名称、数量、价格等信息,方便进行进货、销售和库存统计等操作。 3. 电话簿 在电话簿中,可以使用一维数组来存储联系人的姓名、电话号码等信息,方便进行查找和管理。 4. 游戏排行榜 在游戏中,可以使用一维数组来存储玩家的得、等级等信息,方便进行排名和比较。 5. 购物清单 在购物清单中,可以使用一维数组来存储要购买的商品名称、数量、价格等信息,方便进行结算和管理。 下面是一个简单的Java程序,演示了如何使用一维数组进行学生成绩管理: ``` import java.util.Scanner; public class ScoreManagement { public static void main(String[] args) { Scanner input = new Scanner(System.in); int n; System.out.print("请输入学生人数:"); n = input.nextInt(); int[] score = new int[n]; for (int i = 0; i < n; i++) { System.out.print("请输入第" + (i+1) + "个学生的成绩:"); score[i] = input.nextInt(); } int sum = 0; for (int i = 0; i < n; i++) { sum += score[i]; } double average = sum / (double)n; System.out.println("平均为:" + average); } } ``` 在上面的程序中,首先通过输入学生人数来创建一个对应长度的一维数组 `score`,然后通过循环输入每个学生的成绩。最后计算所有学生的平均并输出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值