Codefights RecurringTask Issue
Codefights RecurringTask Issue
我在这个问题上被困了几个小时,我想不出来。有人能给我指个正确的方向吗?
问题是:
如果你有一个需要定期完成的任务,你可以在Asana中将其设置为循环任务。一种选择是将任务安排为每k周在一周的指定日期重复一次。
能够查看任务计划的前n个日期将是有用的。给定任务计划的第一个日期,返回包含前n个日期的数组。
在此任务中,您可能需要月份长度和工作日名称,如下所示:
一月到十二月的月长:31、28、31、30、31、31、31、30、31、31、31、31、30、30、31。
闰年的二月有29天。工作日名称:"sunday"、"monday"、"tuesday"、"wednesday"、"thursday"、"friday"、"saturday"。
2015年1月1日是星期四。日期格式为dd/mm/yyyy。
对于firstDate = "01/01/2015", k = 2, daysOfTheWeek = ["Monday", "Thursday"], n = 4,输出应为
recurringTask(firstDate, k, daysOfTheWeek, n) =
["01/01/2015", "05/01/2015", "15/01/2015", "19/01/2015"]
谢谢你的帮助,这里是我的代码(我认为它是一个烂摊子,我只有3天的c++)以防万一:
int dayofweek(int d, int m, int y){
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;
}
std::vector<std::string> recurringTask(std::string firstDate, int k, std::vector<std::string> daysOfTheWeek, int n) {
std::vector<std::string> ans = {firstDate};
bool is_leap = false;
//date to ints for firstDate
int d = std::stoi(firstDate.substr(0, 2));
int m = std::stoi(firstDate.substr(3, 2));
int y = std::stoi(firstDate.substr(6));
//check if leap
int add_days = 7 * k;
if((y % 4 == 0 && y % 100 != 0) || y % 400 == 0){
is_leap = true;
}
for(int i = 1; i < n; i++){
for(int j = 1; j < daysOfTheWeek.size(); j++){
int max_d = 31;
//month
if(m == 2){
if(is_leap){
max_d = 29;
}else {
max_d = 28;
}
}else{
max_d = 30;
}
if(d + add_days > max_d){
//Go to next month
d = d + add_days - max_d;
m += 1;
if(m > 12){
//Go to next year.
m = 1;
y += 1;
}
ans.push_back(std::to_string(d) + "/" + std::to_string(m) + "/" + std::to_string(y));
}else{
d += add_days;
ans.push_back(std::to_string(d) + "/" + std::to_string(m) + "/" + std::to_string(y));
}
}
}
return ans;
}
你做对了。
首先,你的max_d逻辑是错误的。Max_d取决于月份。
vector<int> max_d{ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
根据该向量查询它。还要做闰年检查。棘手的部分是给定daysOfTheWeek向量,您需要构造另一个向量,按照开始日期的顺序保存一周中的所有日子。我的意思是
首先,保证在daysOfTheWeek向量
中有一个起始日期,它是星期几second如果daysOfTheWeek = ["Monday", "Thursday"]并且起始日期是星期四,则需要创建一个以数字形式保存相应天数的向量。
vector<string> weekDays{ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" };
根据该向量查询它。所以逻辑是,我取daysOfTheWeek向量并创建一个保存天数数字形式的新向量,所以这个向量应该包含星期一和星期四的[1,4]。现在我重新排列这个向量,以便在保持顺序的同时将起始日放在第一位……所以它变成了[4,1]。现在我去掉前面的元素,向量就变成了[1]对于每个任务,我只需要打印开始日期,循环u刚刚创建的向量,把每个元素添加到开始日期,然后打印。
deque<int> dow;
for (int i = 0; i < daysOfTheWeek.size(); i++){
for (int j = 0; j < weekDays.size(); j++){
if (daysOfTheWeek[i] == weekDays[j]){
dow.push_back(j);
break;
}
}
}
int startDow = dayofweek(stoi(day), stoi(month), stoi(year));
while (dow.front() != startDow){
dow.push_back(dow.front());
dow.pop_front();
}
dow.pop_front();
- Seg Fault Issue C++ (file IO / getline)
- Issue with WriteProcessMemory
- std::partition segfault issue
- VSCode C/C++ Intellisense issue: Undefined identifiers (Linu
- OpenGL glBufferSubData Offset issue
- boost::property_tree XML issue
- qt QWidget::closeEvent link issue
- QT 和 JIRA Rest API: /rest/api/2/issue/createmeta 意外返回韩语的 iss
- Crypto++ GetModulus() issue
- Vector.push_back Issue
- C++嵌套类从嵌套类继承,请键入 issue
- C++ PBKDF2 Issue
- CMake FindJNI issue on linux
- C++ 将二维数据库保存到文件ISSUE中
- MySQL with Qt issue
- Qt with Visual Studio macro issue
- 从gcc 5.4升级至gcc 6.3 std::thread std:ref issue
- Issue with a for loop (C++, Visual Studio
- Qt QLCDNumber issue
- Codefights RecurringTask Issue