特定の年のカレンダーをC++で印刷します
この問題では、1年が与えられ、その年のカレンダーを印刷したいと思います。
年のカレンダーには、その月のすべての日付のすべての日、月が表示されます。そして、ここでは、今年のカレンダーを返すプログラムを作成します。
このためには、次のような計算が必要になります。
特定の月の日数
1月、3月、5月、7月、8月、10月、12月は31日です。
2月はうるう年では28日、うるう年では29日です。
4月、6月、9月、11月は30日です。
その月の開始日(平日)
年と月に基づいて、平日は毎月1日に検索されます。
例
それでは、2020年のカレンダーを印刷するプログラムを作成しましょう-
#include<iostream>
using namespace std;
int dayNumber(int day, int month, int year){
static int t[] = { 0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4 };
year -= month < 3;
return ( year + year/4 - year/100 + year/400 + t[month-1] + day) % 7;
}
string getMonthName(int monthNumber){
string months[] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
return (months[monthNumber]);
}
int numberOfDays (int monthNumber, int year){
switch(monthNumber){
case 0 :
case 2 :
case 4 :
case 6 :
case 7 :
case 9 :
case 11: return(31);
break;
case 1 :
if (year % 400 == 0 || (year % 4 == 0 && year %100 != 0))
return (29);
else
return (28);
break;
case 3 :
case 5 :
case 8 :
case 10 : return(30);
break;
}
}
void printCalendar(int year){
cout<<"\t\t\t Calendar - Year "<<year;
int days;
int current = dayNumber (1, 1, year);
for (int i = 0; i < 12; i++){
days = numberOfDays (i, year);
cout<<endl<<"\t\t ----X----"<<getMonthName (i).c_str()<<"----X---- \t\t"<<endl;
cout<<" Sun Mon Tue Wed Thu Fri Sat \n";
int k;
for (k = 0; k < current; k++)
cout<<"\t";
for (int j = 1; j <= days; j++){
printf("%5d", j);
if (++k > 6){
k = 0;
cout<<endl;
}
}
if (k)
cout<<endl;
current = k;
}
return;
}
int main(){
int year = 2019;
printCalendar(year);
return (0);
} 出力
Calendar - Year 2019 ----X----January----X---- Sun Mon Tue Wed Thu Fri Sat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ----X----February----X---- Sun Mon Tue Wed Thu Fri Sat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ----X----March----X---- Sun Mon Tue Wed Thu Fri Sat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ----X----April----X---- Sun Mon Tue Wed Thu Fri Sat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 ----X----May----X---- Sun Mon Tue Wed Thu Fri Sat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ----X----June----X---- Sun Mon Tue Wed Thu Fri Sat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 ----X----July----X---- Sun Mon Tue Wed Thu Fri Sat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ----X----August----X---- Sun Mon Tue Wed Thu Fri Sat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ----X----September----X---- Sun Mon Tue Wed Thu Fri Sat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 ----X----October----X---- Sun Mon Tue Wed Thu Fri Sat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ----X----November----X---- Sun Mon Tue Wed Thu Fri Sat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 ----X----December----X---- Sun Mon Tue Wed Thu Fri Sat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
-
特定のソースから宛先までのすべてのパスをC++で出力します
この問題では、有向グラフが与えられ、グラフのソースから宛先までのすべてのパスを印刷する必要があります。 有向グラフ は、頂点aからbに向けられたエッジを持つグラフです。 問題を理解するために例を見てみましょう ソース=K宛先=P 出力: K -> T -> Y -> A -> P K -> T -> Y -> P K -> A -> P ここで、KからPへのパスを見つけました。パスをトラバースし、KからPに向かうすべてのパスを出力しました。 この問題を解決するために、深さ優先探索を使用してグラフをトラバースします。
-
C++での切断されたグラフのBFS
切断されたグラフ は、1つ以上のノードがグラフの端点ではない、つまり接続されていないグラフです。 切断されたグラフ… 現在、Simple BFSは、グラフが接続されている場合、つまりグラフのすべての頂点にグラフの1つのノードからアクセスできる場合にのみ適用できます。上記の切断されたグラフの手法では、いくつかの法則にアクセスできないため不可能です。したがって、切断されたグラフで幅優先探索を実行するには、次の変更されたプログラムの方が適しています。 例 #include<bits/stdc++.h> using namespace std; void insertnode(v