はい、私は考えがあります。私の考えは、あなたが戻ってあなたが選択したアルゴリズムが木曜日であることを決定するために再考することです。それは間違って死んだ:-)
今は、1日2回右のような壊れた時計のように、あなたは正しい答えを与える入力パラメータを見つけるかもしれませんが、それらはルールではなく例外になります。あなたは次木曜日は、指定した日付からあるときに把握したい場合は
、Cはまさにその目的のために、日付と時刻の機能を提供します。そこまでは
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
static char *textday[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
int main (int argc, char *argv[]) {
int year, month, day, today, thursday;
struct tm *mytm;
time_t mytime;
// Get all arguments (minimal error checks).
if (argc != 3) {
printf ("Usage: next_thursday <year> <month>\n");
return -1;
}
year = atoi (argv[1]);
month = atoi (argv[2]);
// Do first fourteen days of the month.
for (day = 1; day <= 14; day++) {
を、それだけでパラメータを取得し、ループを開始しています。計算の肉は以下の通りです。有用な数値を設定し、年月日を強制的に入力してください。次にmktime
はtm_wday
(曜日)欄に記入し、それを木曜日までの日数を調べるために使用することができます。 、あなたがより読みやすいソリューションが必要な場合
today thursday
------- --------
0 (sun) 4
1 (mon) 3
2 (tue) 2
3 (wed) 1
4 (thu) 7
5 (fri) 6
6 (sat) 5
:単に私たちに次の表に基づいて日数を与えるために使用されます - thursday
計算はモジュラス詐欺のビットであることを
// Make the tm structure based on date (and midday).
mytime = time (0);
mytm = localtime (&mytime);
mytm->tm_year = year - 1900;
mytm->tm_mon = month - 1;
mytm->tm_mday = day;
mytm->tm_hour = 12;
mytime = mktime (mytm);
// Output filled in fields and days till next Thursday.
today = mytm->tm_wday;
thursday = (11 - today) % 7;
if (thursday == 0)
thursday = 7;
printf ("%04d-%02d-%02d, weekday = %d (%s), days till Thu = %d\n",
mytm->tm_year + 1900, mytm->tm_mon + 1, mytm->tm_mday,
today, textday[today], thursday);
}
return 0;
}
注意あなたが使用することができます。
if (today < 4) thursday = 4 - today;
else thursday = 11 - today;
このプログラムは2011-03
ために、次の出力:
2011-03-01, weekday = 2 (Tue), days till Thu = 2
2011-03-02, weekday = 3 (Wed), days till Thu = 1
2011-03-03, weekday = 4 (Thu), days till Thu = 7
2011-03-04, weekday = 5 (Fri), days till Thu = 6
2011-03-05, weekday = 6 (Sat), days till Thu = 5
2011-03-06, weekday = 0 (Sun), days till Thu = 4
2011-03-07, weekday = 1 (Mon), days till Thu = 3
2011-03-08, weekday = 2 (Tue), days till Thu = 2
2011-03-09, weekday = 3 (Wed), days till Thu = 1
2011-03-10, weekday = 4 (Thu), days till Thu = 7
2011-03-11, weekday = 5 (Fri), days till Thu = 6
2011-03-12, weekday = 6 (Sat), days till Thu = 5
2011-03-13, weekday = 0 (Sun), days till Thu = 4
2011-03-14, weekday = 1 (Mon), days till Thu = 3
あなたの例でもそれがどのように機能するのか分かりません。 daysToNextThursday(2011、3、17)は木曜日(7)から日(17)を返します。 7 - 17 = -10ではなく、7 - – Nikolay
あなたが提供している小さなコードで何をしているのか正確に伝えるのは難しいですが、もちろん、 'day'がその日であれば' Thursday-day'は間違っています今週の曜日ではなく月の... – jamesdlin
これは宿題だと思いますか?もしそうなら、宿題タグをこの質問に追加してください。それに加えて、アルゴリズムは単純に欠陥がある。各変数がどのような役割を果たしているか考え直すことができます。 – Bart