chenchen题解:NOIP2015-J

下面是NOIP2015提高组初赛错题整理

前序遍历序列与中序遍历序列相同的二叉树为()
只有根节点或非叶子节点只有右子树的二叉树
解释:看图
chenchen题解:NOIP2015-J_第1张图片

如果根的高度为 1,具有 61 个结点的完全二叉树的高度为:
解释:
代入公式:完全二叉树节点数 n = 2 n − 1 n=2^n-1 n=2n1
所以最后答案是6

重新排列 1234 使得每一个数字都不在原来的位置上,一共有( )种排法。
解释:
这题的数据量很小,直接穷举
2143
2413
2341
3142
3412
3421
4123
4321
4312

共9种

(打印月历)输入月份 m(1≤m≤12),按一定格式打印 2015mm 月的月历。

例如,2015 年一月的月历打印效果如下(第一列为周日):
chenchen题解:NOIP2015-J_第2张图片

#include
using namespace std;
const int dayNum[]={-1,31,28,31,30,31,30,31,31,30,31,30,31};
int m, offset, i;
int main()
{
    cin >> m;
    cout <<"S	M	T	W	T	F	S"<<endl;//'	'为tab制表符;
    for (i = 1; i < m; i++)
        offset =;
    for (i = 0; i < offset; i++)
        cout <<'	';
    for (i = 1; i <=;i++)
    {
        cout <<;
        if(i==dayNum[m]||==0)
            cout << endl;
        else
            cout << '	';
    }
    return 0;
}

解释:通过偏移数offset将每个月的日期输出到对应的星期上
①offset记录上个月的偏移数,1月份的偏移数为4,所以此空应填:offset=4
②计算第m个月的偏移数,所以应加上前一个月的天数并对7取余数,(offset+dayNum[i])%7
③输出第m个月的日期,dayNum[m]
④输出循环变量i表示的日期
⑤换行条件,当前日期加上偏移数如果是7的倍数时换行,所以应填入:(offset+i)%7

你可能感兴趣的:(算法)