解交互题时如何规划交互流程

发布于:2025-03-05 ⋅ 阅读:(13) ⋅ 点赞:(0)

规划交互流程是解决 C++ 交互题的关键步骤,以下从不同类型的交互场景详细介绍规划交互流程的方法:

与用户进行简单交互
以一个简单的猜数字游戏为例,目标是让用户猜出一个 1 - 100 之间的随机数,程序需要根据用户的猜测给出提示。
步骤分析

  • 初始化:生成一个 1 - 100 之间的随机数作为答案。
  • 开始交互:提示用户输入一个猜测的数字。
  • 处理输入:根据用户输入的数字与答案进行比较,给出相应提示(猜大了、猜小了或猜对了)。
  • 循环交互:如果用户没有猜对,继续提示用户输入,直到猜对为止。
  • 结束交互:当用户猜对时,输出恭喜信息并结束程序。
    代码示例
#include <iostream>
#include <cstdlib>
#include <ctime>

int main() {
    // 初始化:生成随机数
    srand(static_cast<unsigned int>(time(nullptr)));
    int answer = rand() % 100 + 1;

    int guess;
    while (true) {
        // 开始交互:提示用户输入
        std::cout << "请猜一个1 - 100之间的数字: ";
        std::cin >> guess;

        // 处理输入
        if (guess > answer) {
            std::cout << "猜大了,请再试一次。" << std::endl;
        } else if (guess < answer) {
            std::cout << "猜小了,请再试一次。" << std::endl;
        } else {
            // 结束交互
            std::cout << "恭喜你,猜对了!" << std::endl;
            break;
        }
    }

    return 0;
}

与评测系统交互(竞赛场景)
在竞赛中,交互题通常会有特定的交互协议,以下以一个简单的询问式交互题为例,题目要求在一个 1 - n 的整数序列中找出目标数字。评测系统会根据你的询问返回信息。

步骤分析

  • 读取初始信息:从评测系统读取序列的范围 n。
  • 开始询问:向评测系统发送询问,询问某个数字是否是目标数字。
  • 处理反馈:根据评测系统的反馈(是或否),缩小搜索范围。
  • 循环询问:重复步骤 2 和 3,直到找到目标数字。
  • 输出结果:向评测系统输出最终的目标数字。

代码示例

#include <iostream>

int main() {
    int n;
    // 读取初始信息
    std::cin >> n;

    int left = 1, right = n;
    while (left < right) {
        int mid = (left + right) / 2;
        // 开始询问
        std::cout << "Is the number less than or equal to " << mid << "? (1 for yes, 0 for no)" << std::endl;
        int response;
        std::cin >> response;

        // 处理反馈
        if (response) {
            right = mid;
        } else {
            left = mid + 1;
        }
    }

    // 输出结果
    std::cout << "The number is " << left << std::endl;

    return 0;
}

多轮复杂交互
以一个点菜系统为例,用户可以多次点菜、修改订单、结算。
步骤分析

  • 显示菜单:程序启动后,显示菜品列表及价格。
  • 接受点菜:提示用户输入菜品编号和数量,将点菜信息记录下来。
  • 提供操作选项:询问用户是否继续点菜、修改订单或结算。
  • 处理操作:根据用户选择的操作,执行相应的处理(继续点菜、修改订单信息、计算总价并输出结算信息)。
  • 循环交互:重复步骤 2 - 4,直到用户选择结算。
  • 结束交互:输出结算信息,结束程序。

代码示例

#include <iostream>
#include <vector>

struct Dish {
    int id;
    std::string name;
    double price;
};

struct OrderItem {
    int dishId;
    int quantity;
};

void displayMenu(const std::vector<Dish>& menu) {
    std::cout << "菜单:" << std::endl;
    for (const auto& dish : menu) {
        std::cout << "编号: " << dish.id << ", 名称: " << dish.name << ", 价格: " << dish.price << " 元" << std::endl;
    }
}

void placeOrder(std::vector<OrderItem>& order) {
    int dishId, quantity;
    std::cout << "请输入菜品编号和数量(用空格分隔): ";
    std::cin >> dishId >> quantity;
    order.push_back({dishId, quantity});
}

void modifyOrder(std::vector<OrderItem>& order) {
    int dishId, newQuantity;
    std::cout << "请输入要修改的菜品编号和新的数量(用空格分隔): ";
    std::cin >> dishId >> newQuantity;
    for (auto& item : order) {
        if (item.dishId == dishId) {
            item.quantity = newQuantity;
            break;
        }
    }
}

double calculateTotal(const std::vector<Dish>& menu, const std::vector<OrderItem>& order) {
    double total = 0;
    for (const auto& item : order) {
        for (const auto& dish : menu) {
            if (dish.id == item.dishId) {
                total += dish.price * item.quantity;
                break;
            }
        }
    }
    return total;
}

int main() {
    std::vector<Dish> menu = {
        {1, "鱼香肉丝", 25.0},
        {2, "宫保鸡丁", 22.0},
        {3, "麻婆豆腐", 18.0}
    };
    std::vector<OrderItem> order;

    while (true) {
        displayMenu(menu);
        placeOrder(order);

        int choice;
        std::cout << "请选择操作:1. 继续点菜 2. 修改订单 3. 结算: ";
        std::cin >> choice;

        if (choice == 1) {
            continue;
        } else if (choice == 2) {
            modifyOrder(order);
        } else if (choice == 3) {
            double total = calculateTotal(menu, order);
            std::cout << "总价: " << total << " 元" << std::endl;
            break;
        }
    }

    return 0;
}

通过以上不同场景的示例,你可以看到规划交互流程的关键在于明确每个阶段的任务、输入输出内容以及状态的转换,这样才能有条不紊地解决交互题。


网站公告

今日签到

点亮在社区的每一天
去签到