到天宫做客(模拟)

到天宫做客

题目描述

有一天,我做了个梦,梦见我很荣幸的接到了猪八戒的邀请,到天宫陪他吃酒。我犹豫了。天上一日,人间一年啊!当然,我是个闲人,一年之中也没有多少时日是必须在人间的,因此,我希望选一个最长的空闲时间段,使我在天上待的时间尽量长。记住,今年是4000年。天上一天也是24小时,每小时60分,每分60秒。

输入

第一行是一个非负整数 N,表示4000年中必须呆在人间的天数,以下共N行,每行两个用空格隔开的正整数,即日期(月,日),输入保证无错误,日期无重复。

输出

仅有一行包含一个非负整数,即在天上的时间(四舍五入精确到秒)。

样例输入

2
3 8
12 2

样例输出

63266

模拟,注意边界1月1号,12月31号,

日期之间的距离多少天,都统计距离1月1号的天数相减即可。

#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
#include <cstdlib>
#include <stack>
#include <cstring>
#include <string>
#include <queue>
#define maxn 2000 + 10
#define INF 0x3f3f3f3f
using namespace std;
int day[13] = {31,29,31,30,31,30,31,31,30,31,30,31};
struct node{
    int l,r;
    node (int l = 0, int r = 0):l(l),r(r){}
    bool operator < (const node & a)const{
        if( l == a.l) return r < a.r;
        return l < a.l;
    }
}no[maxn];
int cal(int i){
    int monl = no[i].l;
    int dayl = no[i].r;
    int ans = 0;
    for(int i=0;i<monl-1;i++)
        ans += day[i];
    ans += dayl;
    return ans;
}
int main(){
    int n;
    while(scanf("%d",&n)!=EOF){
        int ff = 0;
        int rr = 0;
        for(int i=0;i<n;i++){
            scanf("%d%d",&no[i].l,&no[i].r);
            if(no[i].l == 12 && no[i].r == 31)
                rr = 1;
            if(no[i].l == 1 && no[i].r == 1)
                ff = 1;
        }
        int l = n;
        if(!rr){
            no[l++] = node(12,31);
        }
        if(!ff){
            no[l++] = node(1,1);
        }
        sort(no,no + l);
        int maxx = -1;
        for(int i=1;i<l;i++){
            int tmp = cal(i) - cal(i-1) - 1;
            if(ff != 1 && no[i-1].l == 1 && no[i-1].r == 1){
                tmp++;
            }
            if(rr != 1 && no[i].l == 12 && no[i].r == 31){
                tmp++;
            }
            maxx = max(maxx,tmp);
        }
        double ans = ((double)maxx* (24*60*60)/366.0) ;
        if(n == 0){
            printf("%.f\n", 1.0*(24*60*60));<span style="display: none; width: 0px; height: 0px;" id="transmark"></span>
        }
        else
            printf("%d\n",(int)(ans+0.5));
            //printf("%.f\n",(ans));//一样可以四舍五入
    }
    return 0;
}



下面是一个简单的购票系统模拟的golang实现,主要包括以下功能: 1. 用户选择演出场次和座位 2. 系统检查座位是否已经被预定 3. 系统返回总价并确认订单 ```go package main import ( "fmt" ) // 定义座位结构体 type Seat struct { row int col int price int status bool } // 定义演出场次结构体 type Show struct { name string seats [][]Seat } // 初始化演出场次 func initShow() Show { s := Show{ name: "猪八戒大闹天宫", seats: make([][]Seat, 10), } for i := range s.seats { s.seats[i] = make([]Seat, 10) for j := range s.seats[i] { s.seats[i][j] = Seat{ row: i + 1, col: j + 1, price: 100, status: false, } } } return s } // 显示演出场次座位情况 func showSeats(s Show) { fmt.Println(s.name) for i := range s.seats { for j := range s.seats[i] { if s.seats[i][j].status { fmt.Print("X ") } else { fmt.Print("O ") } } fmt.Println() } } // 计算总价 func calcTotalPrice(seats []Seat) int { total := 0 for _, seat := range seats { total += seat.price } return total } // 预定座位 func bookSeats(s Show, seats []Seat) { for _, seat := range seats { s.seats[seat.row-1][seat.col-1].status = true } } func main() { show := initShow() showSeats(show) // 用户选择座位 var row, col int var selectedSeats []Seat for i := 0; i < 2; i++ { // 每次最多选择2个座位 fmt.Print("请选择座位(行 列):") fmt.Scan(&row, &col) seat := show.seats[row-1][col-1] if seat.status { fmt.Println("该座位已经被预定,请重新选择!") continue } selectedSeats = append(selectedSeats, seat) fmt.Print("是否继续选择座位?(Y/N)") var input string fmt.Scan(&input) if input == "N" { break } } // 显示用户选择的座位和总价 fmt.Println("您选择的座位:") for _, seat := range selectedSeats { fmt.Printf("第%d排第%d列,价格%d元\n", seat.row, seat.col, seat.price) } totalPrice := calcTotalPrice(selectedSeats) fmt.Printf("总价:%d元\n", totalPrice) fmt.Print("确认订单?(Y/N)") var input string fmt.Scan(&input) if input == "Y" { bookSeats(show, selectedSeats) fmt.Println("预定成功!") showSeats(show) } else { fmt.Println("预定已取消!") } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值