第n盆花是什么颜色?

分析问题

1.题目描述

花的排列:有m 组花,每组 蓝、黄、红 3 盆,共3*m 盆

数数规则:

  • 从第1盆开始数,数到n 时停下
  • 如果数到最后一盆第3*m 盆,就 倒回来 继续数不再重复数最后一盆
  • 如果数到第1盆,又 倒回去 继续数不再重复数第1盆

2.关键观察

  • 数数的路径 像一条 “折返跑”
  • 去程:1 → 2 → 3 → … →3*m共3*m 步
  • 回程: 3m-1 →3m-2 → … → 2共3m-2 步,因为不重复数第1盆和最后一盆
  • 完整周期:去程 + 回程 =3m + (3m – 2) = 6*m – 2

4. 确定颜色

  • 每3盆颜色循环:蓝1、黄2、红3
  • 计算 数量 % 3:如果是正向
  • 余1 → 蓝色
  • 余2 → 黄色
  • 余0 → 红色 如果是反向:
  • 余1 → 黄色
  • 余2 → 蓝色
  • 余0 → 红色

建立模型

步骤计算方式说明
1. 总花数total= 3m共3m 盆花
2. 周期长度cycle= 6m – 2去程 + 回程
3. 回程调整如果 pos > total,则 pos = 2 * total - pos回程时反向计算
5. 颜色判定(n<3m)pos % 31:蓝,2:黄,0:红
6. 颜色判定(n>3m)pos % 31:黄,2:蓝,0:红

编写代码

#include <iostream>
using namespace std;

int main() {
    int m, n;
    cin >> m >> n;

    int total = 3 * m;          // 总花数
    int cycle = 2 * total - 2;   // 周期长度

   if (n%cycle<=m)    //对来回一个周期取模
    {// 判断颜色
        if (n%l%3==1) cout<<"lan"<<endl;
        if (n%l%3==2) cout<<"huang"<<endl;
        if (n%l%3==0) cout<<"hong"<<endl;
    }
    else
    {
        if (n%l%3==1) cout<<"huang"<<endl;
        if (n%l%3==2) cout<<"lan"<<endl;
        if (n%l%3==0) cout<<"hong"<<endl;
    }



    return 0;
}

保存 编译 运行