2019年1月27日训练日记

今天做了上台阶的题,之前acm上课讲过这个题,虽然远离不是很清楚,但知道是斐波那契数列,就直接做了,用循环做一直是wa,然后就达标输出就过了,不知道为什么,上台阶2是类似斐波那契数列。他是f1=1,f2=1,f3=2,f4=3,f[i]=f[i-1]+f[i-3]+f[i-5];也是打表输出就能过,做的最大连续子段和应该属于贪心算法吧,不需要重新排序。做那个单词排序的题,做了很久最后发现sort也可以排序字符串,是按照首字母的字典序进行排列,今天最难的一道题应该是打印月份吧,看了题解才做出来,代码如下

#include 
using namespace std;
int a[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int n, m, d;
int F(int y, int m, int d)
 {
int t[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};
y -= m < 3;
return (y + y/4 - y/100 + y/400 + t[m-1] + d) % 7;
}
int main()
 {
scanf("%d%d%d", &n, &m, &d);//assert(d % 7 == F(n, m, 1));
if (n % 400 == 0 || n % 100 != 0 && n % 4 == 0)
 {
a[2]++;
}
d = F(n, 1, 1);
if (d == 0) 
{
d = 7;
}
fprintf(stderr, "%d %d %d\n", n, m, d);
d = F(n, m, 1);
//for (int i = 1; i < m; i++)
 {
//d += a[i];
}
//d %= 7;
printf("S   M   T   W   T   F   S\n");
for (int i = 0; i < d; i++)
 {
printf("    ");
}
for (int i = 1, j = d + 1; i <= a[m]; i++, j++) 
{
printf("%d", i);
if (j % 7 == 0 || i == a[m])
 {
printf("\n");
} 
else
 {
if (i < 10)
 {
printf("   ");
} 
else 
{
printf("  ");
}
}
}
return 0;
}

明天要回姥姥家一趟应该没办法做题了。加油!!!

你可能感兴趣的:(笔记)