今年的第几天?
输入年、月、日,计算该天是本年的第几天。
#include <iostream>
#include <vector>
using namespace std;
int main(void)
{
int year, month, day;
while (cin >> year >> month >> day)
{
int count = 0;
int Feb = 28;
if (year % 4 == 0 || year % 400 == 0)
{
Feb = 29;
}
vector<int> monthcount = { 0,31,Feb,31,30,31,30,31,31,30,31,30,31 };
for (int i = 0; i < month; i++)
{
count += monthcount[i];
}
count += day;
cout << count << endl;
}
return 0;
} 傻瓜解法
#include <iostream>
using namespace std;
int main()
{
int d1[12]={31,29,31,30,31,30,31,31,30,31,30,31};
int d2[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int year,month,day;
while(cin>>year>>month>>day)
{
int num=0;
if((year % 4 == 0 && year % 100 != 0)||(year%400 ==0))
{
for(int i=0;i<month-1;i++)
{
num += d1[i];
}
num=num+day;
cout<<num<<endl;
}
else
{
for(int i=0;i<month-1;i++)
{
num += d2[i];
}
num=num+day;
cout<<num<<endl;
}
}
return 0;
}
ps:
请教一下,请看到的大神解答一下,为什么下面这个不行
#include <iostream>
using namespace std;
int main()
{
int d1[12]={31,29,31,30,31,30,31,31,30,31,30,31};
int d2[12]={31,28,31,30,31,30,31,31,30,31,30,31};
while(cin)
{
int year,month,day;
int num=0;
cin>>year>>month>>day;
if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
{
for(int i=0;i<month-1;i++)
{
num += d1[i];
}
num=num+day;
}
else
{
for(int i=0;i<month-1;i++)
{
num += d2[i];
}
num=num+day;
}
cout<<num<<endl;
}
return 0;
}
import java.util.*;
public class Main {
private static final int[] M_DAYS = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int year = sc.nextInt();
int month = sc.nextInt();
int day = sc.nextInt();
if ( (year % 400 == 0) || (year % 4 == 0 && year % 100 !=0) ) {
M_DAYS[2] = 29;
}
int ans = 0;
for (int i=1; i<month; i++) {
ans += M_DAYS[i];
}
ans += day;
System.out.println(ans);
M_DAYS[2] = 28;
}
return;
}
}
import datetime
while True:
try:
y, m, d = map(int, input().split())
date = datetime.datetime(y, m, d)
print(date.strftime("%j").lstrip("0"))
except:
break
需要注意的是:
可以写成一行:
import datetime
while True:
try:
print(datetime.datetime(*map(int, input().split())).strftime("%j").lstrip("0"))
except:
break
import java.util.Scanner;
/**
* 计算一年中的第几天
* 今年的第几天?
* 输入年、月、日,计算该天是本年的第几天。
* 输入描述:
* 包括三个整数年(1<=Y<=3000)、月(1<=M<=12)、日(1<=D<=31)。
* 输出描述:
* 输入可能有多组测试数据,对于每一组测试数据,
* 输出一个整数,代表Input中的年、月、日对应本年的第几天。
* 输入例子1:
* 1990 9 20
* 2000 5 1
* 输出例子1:
* 263
* 122
*
* @author shijiacheng
* @date 2018/2/21
*/
public class DayOfYeafSolution {
public static void main(String[] args){
int[] days = {31,28,31,30,31,30,31,31,30,31,30,31};
Scanner sc = new Scanner(System.in);
while (sc.hasNextInt()){
int Y = sc.nextInt();
int M = sc.nextInt();
int D = sc.nextInt();
if (isLeapYear(Y)){
days[1] = days[1]+1;
}
int day = 0;
for (int i = 1; i < M; i++) {
day+=days[i-1];
}
day +=D;
System.out.println(day);
}
}
/**
* 判断是否是闰年
* @param year
* @return
*/
public static boolean isLeapYear(int year){
if (year%4==0&&year%100!=0){
return true;
}else if (year%400==0){
return true;
}
return false;
}
}
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 每个月的天数,平年
int[] daysInMonth = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
// 循环处理多组测试数据
while (scanner.hasNext()) {
int year = scanner.nextInt();
int month = scanner.nextInt();
int day = scanner.nextInt();
// 判断是否为闰年
boolean isLeapYear = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
// 计算总天数
int totalDays = 0;
// 累加前面月份的天数
for (int i = 0; i < month - 1; i++) {
totalDays += daysInMonth[i];
}
// 加上当月的天数
totalDays += day;
// 如果是闰年且月份大于2月,加1天
if (isLeapYear && month > 2) {
totalDays++;
}
System.out.println(totalDays);
}
scanner.close();
}
}
import java.util.Scanner;
import java.time.LocalDate;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextInt()) { // 注意 while 处理多个 case
int year = in.nextInt();
int month = in.nextInt();
int day = in.nextInt();
LocalDate dateTime = LocalDate.of(year,month,day);
System.out.println(dateTime.getDayOfYear());
}
}
} 邪修方法
#include <iostream>
#include <vector>
using namespace std;
int main() {
int year, month, day;
cin >> year >> month >> day;
vector<int> monthday = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
bool isrunnian = false;
if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){
isrunnian = true;
}
int sum = 0;
for(int i = 0; i < month - 1; ++i){
sum += monthday[i];
}
sum += day;
if(isrunnian && month > 2){
sum++;
}
cout << sum;
}
// 64 位输出请用 printf("%lld") #include <iostream>
#include <map>
#include <vector>
using namespace std;
// 闰年:366 2月 29天
// 平年:365 2月 28天
// 基本规则:如果年份能被 4 整除,则可能是闰年。
// 例外:
// 如果年份能被 100 整除但不能被 400 整除,则是平年。
// 如果年份能被 400 整除,则是闰年。
// 数学表达:
// 闰年条件:(year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)。
// 否则为平年。
int of_day(int y,int m,int d){
vector<int> v(13);
if((y%4==0 && y%100!=0) || y%400==0) v={0,31,29,31,30,31,30,31,31,30,31,30,31};
else v={0,31,28,31,30,31,30,31,31,30,31,30,31};
int ans=0;
for (int i=1; i<m;i++) {
ans+=v[i];
}
ans+=d;
return ans;
}
int main() {
int y,m,d;
while (cin>>y>>m>>d) {
cout<<of_day(y,m,d)<<endl;
}
}
// 64 位输出请用 printf("%lld")
import sys month_day = [31,59,90,120,151,181,212,243,273,304,334,365] for line in sys.stdin: y,m,d = map(int,line.split()) # 平年天数 days = month_day[m-2] + d # 闰年天数,如大于2月则在平年天数上加1天 if y % 4 == 0 and y % 100 != 0&nbs***bsp;y % 400 == 0: if m > 2: days += 1 print(days)
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
HashMap<Integer, Integer> pingYear = new HashMap<>();
pingYear.put(1, 31);
pingYear.put(2, 28);
pingYear.put(3, 31);
pingYear.put(4, 30);
pingYear.put(5, 31);
pingYear.put(6, 30);
pingYear.put(7, 31);
pingYear.put(8, 31);
pingYear.put(9, 30);
pingYear.put(10, 31);
pingYear.put(11, 30);
while (in.hasNextInt()) { // 注意 while 处理多个 case
int a = in.nextInt();
int b = in.nextInt();
int c = in.nextInt();
int day = 0;
for (Map.Entry<Integer, Integer> map : pingYear.entrySet()) {
int key = map.getKey();
int value = map.getValue();
if ( key > b - 1) {
day = day + c;
break;
}
day = day + value;
}
if (isRunYear(a)) {
if (b > 1) {
day += 1;
}
}
System.out.println(day);
}
}
public static boolean isRunYear(int year) {
return year % 4 == 0 && year % 100 != 0
|| year % 400 == 0;
}
} import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Scanner; public class TestDate { public static void main(String[] argvs) throws ParseException { Scanner sc=new Scanner(System.in); while(sc.hasNext()){ String dateStr=sc.nextLine(); SimpleDateFormat sdf=new SimpleDateFormat("yyyy MM dd"); Date date= null; date=sdf.parse(dateStr); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); int index=calendar.get(Calendar.DAY_OF_YEAR); System.out.println(index); } } }