直接用循环写
太蠢了 不解释了。
在这里我以 1995年1月1日为标准 所以暂时只能求1995年1月1日以后的年份日历。
bool Getyear(int year)
{
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
return true;
return false;
}
int GetAllyear(int year)
{
int _year = 1995;
int count = 0;
for (int i = _year; i < year; i++)
if (Getyear(i))
count++;
return count;
}
//1995 1 1 是星期一
int max(int x, int y, int z){
if (x >= y){
if (x >= z)
return x;
return z;
}
else{
if (y >= z)
return y;
return z;
}
}
void Print()
{
int arr1[] = { 0,31,59,90,120,151,181,212,243,273,304,334 };
int arr2[] = { 0,31,60,91,121,152,182,213,244,274,305,335 };
int month1[] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
int month2[] = { 31,29,31,30,31,30,31,31,30,31,30,31 };
char *pstr[] = { "一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月" };
int _yearr;
cin >> _yearr;
int alldays = GetAllyear(_yearr) + 365 * (_yearr - 1995);
printf("%-d\n",_yearr);
if (!Getyear(_yearr))
{
int k = 0;
int firstday = alldays % 7;
int first = firstday;
int count_day = 0;
for (k = 0; k < 4; k++)
{
printf("%20s", pstr[k*3]);
printf("%35s", pstr[k*3+1]);
printf("%35s", pstr[k*3+2]);
cout << endl;
cout << endl;
char *str[] = { "一","二","三","四","五","六","七" };
for (int j = 0; j < 3; j++)
{
for (int i = 0; i < 7; i++)
printf("%5s", str[i]);
}
cout << endl;
int first1 = (arr1[k*3] + firstday) % 7;
int _day1 = month1[k*3];
int sz1 = (_day1 + first) / 7;
int su1 = (_day1 + first) % 7;
if (su1 > 0)
sz1++;
int first2 = (arr1[k*3+1] + firstday) % 7;
int _day2 = month1[k*3+1];
int sz2 = (_day2 + first) / 7;
int su2 = (_day2 + first) % 7;
if (su2 > 0)
sz2++;
int first3 = (arr1[k*3+2] + firstday) % 7;
int _day3 = month1[k*3+2];
int sz3 = (_day3 + first) / 7;
int su3 = (_day3 + first) % 7;
if (su3 > 0)
sz3++;
int count1 = 1;
int count2 = 1;
int count3 = 1;
int sz = max(sz1, sz2, sz3);
for (int f = 0; f < sz; f++)
{
for (int i1 = 0; i1 < 7; i1++)
{
if (first1)
{
printf("%5s", " ");
first1--;
continue;
}
if (count1 > _day1)
{
for(int ii1=i1;ii1<7;ii1++)
printf("%5s", " ");
break;
}
printf("%5d", count1);
count1++;
}
for (int i2 = 0; i2 < 7; i2++)
{
if (first2)
{
printf("%5s", " ");
first2--;
continue;
}
if (count2 > _day2)
{
for (int ii2 = i2; ii2<7; ii2++)
printf("%5s", " ");
break;
}
printf("%5d", count2);
count2++;
}
for (int i3 = 0; i3 < 7; i3++)
{
if (first3)
{
printf("%5s", " ");
first3--;
continue;
}
if (count3 > _day3)
{
for (int ii3 = i3; ii3<7; ii3++)
printf("%5s", " ");
break;
}
printf("%5d", count3);
count3++;
}
cout << endl;
}
cout << endl;
}
}
else
{
int k = 0;
int firstday = alldays % 7;
int first = firstday;
int count_day = 0;
for (k = 0; k < 4; k++)
{
printf("%20s", pstr[k * 3]);
printf("%35s", pstr[k * 3 + 1]);
printf("%35s", pstr[k * 3 + 2]);
cout << endl;
cout << endl;
char *str[] = { "一","二","三","四","五","六","七" };
for (int j = 0; j < 3; j++)
{
for (int i = 0; i < 7; i++)
printf("%5s", str[i]);
}
cout << endl;
int first1 = (arr2[k * 3] + firstday) % 7;
int _day1 = month2[k * 3];
int sz1 = (_day1 + first) / 7;
int su1 = (_day1 + first) % 7;
if (su1 > 0)
sz1++;
int first2 = (arr2[k * 3 + 1] + firstday) % 7;
int _day2 = month2[k * 3 + 1];
int sz2 = (_day2 + first) / 7;
int su2 = (_day2 + first) % 7;
if (su2 > 0)
sz2++;
int first3 = (arr2[k * 3 + 2] + firstday) % 7;
int _day3 = month2[k * 3 + 2];
int sz3 = (_day3 + first) / 7;
int su3 = (_day3 + first) % 7;
if (su3 > 0)
sz3++;
int count1 = 1;
int count2 = 1;
int count3 = 1;
int sz = max(sz1, sz2, sz3);
for (int f = 0; f < sz; f++)
{
for (int i1 = 0; i1 < 7; i1++)
{
if (first1)
{
printf("%5s", " ");
first1--;
continue;
}
if (count1 > _day1)
{
for (int ii1 = i1; ii1<7; ii1++)
printf("%5s", " ");
break;
}
printf("%5d", count1);
count1++;
}
for (int i2 = 0; i2 < 7; i2++)
{
if (first2)
{
printf("%5s", " ");
first2--;
continue;
}
if (count2 > _day2)
{
for (int ii2 = i2; ii2<7; ii2++)
printf("%5s", " ");
break;
}
printf("%5d", count2);
count2++;
}
for (int i3 = 0; i3 < 7; i3++)
{
if (first3)
{
printf("%5s", " ");
first3--;
continue;
}
if (count3 > _day3)
{
for (int ii3 = i3; ii3<7; ii3++)
printf("%5s", " ");
break;
}
printf("%5d", count3);
count3++;
}
cout << endl;
}
cout << endl;
}
}
}
int main()
{
system("mode con cols=110 lines=50");//改变宽高
system("color F0");//改变颜色
Print();
system("pause");
return 0;
}
测试结果