Dream To Me

总有些什么留下来并被惦记

继续温习,种菊


种菊

描述

韵哲君为了能在NOIP中取得好成绩,便独自到某人迹罕至的深山隐居山林,养精蓄锐。有一天,她想种植一些不同颜色(一共只找到了4种不同颜色菊花的种子)的菊花以便在闲暇时间养养神(够闲适~~~)便设计了一种种植菊花的颜色顺序为:

第1朵红菊,第2朵白菊,第3朵青菊,第4朵黄菊,第5朵红菊,第6朵白菊,第7朵青菊,第8朵黄菊……依次类推。

韵哲君将这个想法说给了tttak君,tttak君听了之后认为光是按照这样一种规律太没有特色了(因为tttak是一个“标新立异”的大牛~~~),便向韵哲君提出一种新的种植方案:第1朵红菊,第2朵白菊,第3朵青菊,第4朵黄菊,第5朵白菊,第6朵青菊(每4朵为一个序列,前一序列的第2朵是后一序列的第1朵)。韵哲君寒了一阵后~~还是按照tttak的想法种起了菊花……

现在请你算出第n朵是什么颜色的菊花,并把它所在的序列排列情况输出。(白菊、黄菊、青菊、红菊分别用bai,huang,qing,hong表示)

[数据规模]

n<maxlongint

From 宜昌6中(初中)


输入格式

只有一个数n,即第n朵菊花。

输出格式

输出有2行,

第1行为第n朵菊花的颜色,

第2行为所在的序列排列情况。


思路:

  题目给出的规律很明显,把花当成数列的话,就是每一序列的第一个数字是前一序列的第二个数字,不知我这说法是不是错的……不过我这种方法是模拟一下种花的实际过程,发现每16朵一循环。。那就好办了,对其取余后就得到了相应的位置以及颜色信息。

  然后想。。。应该还有数学方法吧。。每朵和前面的第三朵的颜色相同。。。


AC Code:

#include <iostream>
using namespace std;
void print(int n)
{
   if(n==1)
   cout<<"hong";
   if(n==2)
   cout<<"bai";
   if(n==3)
   cout<<"qing";
   if(n==4)
   cout<<"huang";
   if(n==5)
   cout<<" ";
   if(n==6)
   cout<<endl;
}
int main()
{
  int n,key;
  int num[16]={1,2,3,4,2,3,4,1,3,4,1,2,4,1,2,3};
  int fid[16]={1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4};
  cin>>n;
  print(num[n%16-1]);
  print(6);
  key=fid[n%16-1];
  for(int i=0;i<16;i++)
    if(key==fid[i])
     {
      print(num[i]);
      print(5);
     }
  system("pause");
  return 0;
}