sa1378
پنج شنبه 01 آبان 1393, 18:44 عصر
سلام
برای یه سوال یه کد زدم ولی خروجی اشتباه میده
میخواستم ببینم اشکالش چیه
سوال اصلی :
http://cerberus.delosent.com:791/usacoprob2?a=tjEQ3WFdRQC&S=friday
ترجمه سوال (به صورت خلاصه):
Friday the Thirteenthقراره یه برنامه بنویسیم که برامون محاسبه کنه در هر ماه روز 13ام چه روزیه؟ اول یه عدد n درورودی میار بعد برنامه ی شما باید محاسبه کنه که از ژانویه ی 1900 تا دسامبر 1900+n-1 چند تا ماه 13امش شنبه بوده چند تا ماه یکشنبه بوده چند تا .....ودر خروجی به ترتیب تعداد شنبه ها بعد یکشنبه ها بعد دو شنبه ها ......بعد جمعه ها رو چاپ کنید یعنی 7 تا عدد در یک خط !
چیزایی که باید بدونید : 1. اول ژانویه ی 1900 دوشنبه بوده
2. سپتامبر آپریل ژون نوامبر 31 روزه و فبریه 28 روزه است به جز سال های کبیسه که 29 روزه می شه
3 . هر سالی که مضرب 4 باشه کبیسه حساب می شه مثلا 1992 =4*498 واسه همین کبیسه است !
4 . مورد بالا در مورد سال هایی که اول قرن اند برقرار نیست مثل 1900 1800 1700 2100 اما در همین قاعده هم مضرب های 400 استثنا اند ( می شه استثنا تو استثنا ) مثلا 2000 کبیسه حساب می شه !
در ورودی سوال فقط یک n هست که از 400 کوچیکتره!
کد:
/*
ID: sa.13781
PROG: friday
LANG: C++
*/
#include <iostream>
#include <fstream>
using namespace std;
int n,day[7],p,month,year;
int month_calc() // CORRECT
{
if(month==4 || month==6 || month==9 || month==11)
return 30;
else if (month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12)
return 31;
else if (month==2)
{
if(year%100==0)
{
if(year%400==0)
return 29;
else
return 28;
}
else if(year%4==0)
return 29;
else
return 28;
}
}
void output() // CORRECT
{
ofstream fout ("friday.out");
for(int i=0;i<7;i++)
fout<<day[i]<<" ";
fout<<"\n";
}
void calc()
{
year=1900;
month=1;
p=1;
day[1]++;
while(year<1900+n)
{
int ex=month_calc();
p=(p+ex)%7;
day[p]++;
month++;
if(month==12)
{
month=1;
year++;
}
}
}
int main()
{
ifstream fin ("friday.in");
fin>>n;
calc();
output();
return 0;
}
یه نکته دیگه هم اینه که من اشکال این کدم اصلا برام مهم نیست
لطفا اگه میتونین بگین که قدم به قدم چیکار کردین که تونستین اشکال کد رو پیدا کنین
با تشکر
برای یه سوال یه کد زدم ولی خروجی اشتباه میده
میخواستم ببینم اشکالش چیه
سوال اصلی :
http://cerberus.delosent.com:791/usacoprob2?a=tjEQ3WFdRQC&S=friday
ترجمه سوال (به صورت خلاصه):
Friday the Thirteenthقراره یه برنامه بنویسیم که برامون محاسبه کنه در هر ماه روز 13ام چه روزیه؟ اول یه عدد n درورودی میار بعد برنامه ی شما باید محاسبه کنه که از ژانویه ی 1900 تا دسامبر 1900+n-1 چند تا ماه 13امش شنبه بوده چند تا ماه یکشنبه بوده چند تا .....ودر خروجی به ترتیب تعداد شنبه ها بعد یکشنبه ها بعد دو شنبه ها ......بعد جمعه ها رو چاپ کنید یعنی 7 تا عدد در یک خط !
چیزایی که باید بدونید : 1. اول ژانویه ی 1900 دوشنبه بوده
2. سپتامبر آپریل ژون نوامبر 31 روزه و فبریه 28 روزه است به جز سال های کبیسه که 29 روزه می شه
3 . هر سالی که مضرب 4 باشه کبیسه حساب می شه مثلا 1992 =4*498 واسه همین کبیسه است !
4 . مورد بالا در مورد سال هایی که اول قرن اند برقرار نیست مثل 1900 1800 1700 2100 اما در همین قاعده هم مضرب های 400 استثنا اند ( می شه استثنا تو استثنا ) مثلا 2000 کبیسه حساب می شه !
در ورودی سوال فقط یک n هست که از 400 کوچیکتره!
کد:
/*
ID: sa.13781
PROG: friday
LANG: C++
*/
#include <iostream>
#include <fstream>
using namespace std;
int n,day[7],p,month,year;
int month_calc() // CORRECT
{
if(month==4 || month==6 || month==9 || month==11)
return 30;
else if (month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12)
return 31;
else if (month==2)
{
if(year%100==0)
{
if(year%400==0)
return 29;
else
return 28;
}
else if(year%4==0)
return 29;
else
return 28;
}
}
void output() // CORRECT
{
ofstream fout ("friday.out");
for(int i=0;i<7;i++)
fout<<day[i]<<" ";
fout<<"\n";
}
void calc()
{
year=1900;
month=1;
p=1;
day[1]++;
while(year<1900+n)
{
int ex=month_calc();
p=(p+ex)%7;
day[p]++;
month++;
if(month==12)
{
month=1;
year++;
}
}
}
int main()
{
ifstream fin ("friday.in");
fin>>n;
calc();
output();
return 0;
}
یه نکته دیگه هم اینه که من اشکال این کدم اصلا برام مهم نیست
لطفا اگه میتونین بگین که قدم به قدم چیکار کردین که تونستین اشکال کد رو پیدا کنین
با تشکر