继续温习,种菊
种菊
描述
韵哲君为了能在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;
}